Sizeof取的长度小于负数?

来源:互联网 发布:美元霸主地位知乎 编辑:程序博客网 时间:2024/05/21 22:22
char array[10]="ABCDEFG";int len=sizeof(array);int num=-1;if(len<num)cout<<"Ture";


一般认为sizeof取长会是一个正整数,但是和一个负数比较,运行结果是“Ture”。why?

因为sizeof的返回值是size_t型,同于unsigned int。

当与一个signed int 做比较的同时,signed int会做隐式的类型转换,

也就是说上面的num在比较的同时变成了一个比较大的unsigned int,所以才会为真。

为什么会变成一个较大的数? 是因为把二进制表示的符号位当作最高位了。

1 0