size_t 和int 无符号整型和有符号整型

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_25458977/article/details/82862501

size_t一般用来表示一种计数,比如有多少东西被拷贝等,例如sizeof操作符的结果类型是size_t,该类型保证能容纳实现所建立的最大对象的字节大小。他的意义大致是: 适于计量内存中可容纳的数据项目个数的无符号整型类型。

因此,它表示的是0-MAXINT的范围;

typedef unsigned int size_t;  32位系统

typedef unsigned long size_t; 64位系统

 具体如下:

// Definitions of common types
#ifdef _WIN64
 typedef unsigned __int64 size_t;
 typedef __int64 ptrdiff_t;
 typedef __int64 intptr_t;
#else
 typedef unsigned int size_t;
 typedef int ptrdiff_t;
 typedef int intptr_t;
#endif​
我的使用代码如下:
for(size_t i=0;i<binary_image.rows;i++)
{
    for(size_t j=0;j<binary_image.cols;j++)
    {
        int tl_x = MAX(i-12,0);
    }
    
}

该程序返回 tl_x的值为-12,这是因为i是无符号整型,i-12依然是无符号整型, 而 0  是有符号整型,两者比较是会先将无符号整型转变为有符号整型,而-12转换为有符号整型为4294967306(应该是=_=!)

因此会返回-12;

同样会出现这种状况的是:
strlen()函数     strlen("Demon") 返回size_t

猜你喜欢

转载自blog.csdn.net/qq_25458977/article/details/82862501