分析下面的程序:
int main()
a=b;
int main()
{
unsigned int a ;
int b=-1;a=b;
printf(“%u”,a);
}
分析:如果此平台int是16位的,则
-1在内存中是以补码形式存储的。补码的二进制为:1111 1111 1111 1111
这个数按照无符号数输出:也就是0xffff 也就是65535.
从可视化的-1怎么转换到补码形式:因为假设你的平台是16位的
-1补码 = 2^16 - |-1| = 1 0000 0000 0000 0000 - 1 = 1111 1111 1111 1111:
注:16位系统中一个int能存储的数据的范围为-32768~32767,而unsigned能存储的数据范围则是0~65535。-1的十六进制表示为:0xffff 与65535的16进制表示一致。