#include <stdio.h>
int i ;
int main()
{
i--;//-1
if (i>sizeof(i))
{
printf(">\n");
}
else if(i<sizeof(i))
{
printf("<\n");
}
return 0;
}
结果输出位“>”
全局变量,静态变量都存放于静态区
全局变量,静态变量不初始化,默认初始化为0
局部变量放在栈区,不初始化,默认值是随机值
这里的i未被初始化,默认值为0。
在进行i--后变为有符号整型,二进制位中第一位为符号位。
sizeof操作符的返回值是size_t类型的,属于无符号整型(unsigned int)。
此时i=-1为有符号数,需要转换成无符号整型(将int转换为unsigned int)。
如果某个操作符的各个操作数属于不同类型,除非其中一个操作数的类型转换为另一个操作数的类型,否则操作无法进行。下面层次体系陈伟寻常算数转换(从下向上转换):
long double
double
float
unnsigned long int
long int
unsigned int
int
-1的原码为10000000000000000000000000000001
反码为(符号位不动,按位取反):11111111111111111111111111111110
-1在储存中存补码(反码+1):11111111111111111111111111111111,将其当做无符号数,首位不为符号位,此时为一个非常大的正数