算术转换之寻常算术转换
题目
#include <stdio.h>
int i;//
int main()
{
i--;
if (i > sizeof(i))
{
printf(">\n");
}
else
{
printf("<\n");
}
return 0;
}
运行结果
题目分析
i
为全局变量,不初始化默认为0。i--;
后可以得到 i==1
sizeof(i)
计算的是占用内存空间大小,不会有负数,所以sizeof()
返回类型是size_t
类型的,size_t是无符号整型 unsigned int
进行if条件判断时,比较i
与sizeof(i)
的大小
i
的类型为int
,而sizeof(i)
的类型为unsigned int
,两者进行比较时,需要将i
的int
类型转换为unsigned int
类型后才可以进行比较。
-1的二进制
原码1 0000000 00000000 00000000 00000001
反码1 1111111 11111111 11111111 11111110
补码1 1111111 11111111 11111111 11111111
内存中以补码形式储存
当i
的类型转为unsigned int
时
i
的值为0xFFFF FFFF
,远大于sizeof(i)
的返回值4
所以打印结果为>
。