C语言,-1与sizeof()返回值的比较
#include <stdio.h>
int i;
int main()
{
i--;
if (i > sizeof(i))
{
printf("A");
}
else
{
printf("B");
}
return 0;
}
这段代码的输出结果是社么呢?
这个题目有很多要注意,容易出现错误的点:
1.全局变量和静态变量的初始化如果不赋值,默认初始化为0。
2.sizeof的返回值是size_t类型的数据,size_t存放的是无符号整型的数据。
3.当一个表达式里既有有符号整型,又有无符号整型,会将表达式里的对象都转化为为无符号整型。
i在i--之后变成了-1,sizeof(i)的大小为四个字节,所以返回值为无符号整型4,同时-1也会被转化为无符号整型。
关于-1转化为无符号整形:
-1是负数,原码为
10000000000000000000000000000001
反码为:
11111111111111111111111111111110
补码为:
11111111111111111111111111111111
无符号整型就没有最高位代表正负的规则了,默认-1的补码当作正数的补码处理,正数的原码反码补码一致,所以-1的原码为11111111111111111111111111111111,转化为十进制为4294967286,当然是大于sizeof的返回值4。
所以代码的结果输出为A。