冥王神话人物:C语言问题

来源:百度文库 编辑:高校问答 时间:2024/05/02 16:51:40
为什么这个程序的结果是-1 65535
main()
{ int a=-1;
unsigned int b;
b=a;
printf("%d %u\n",a,b);
}
详细点;
谢谢!!

int a;a是有符号整型.
所以a=-1是以补码形式存储在内存中,其二进制形式为:11111111 111111
unsigned int b;b是无符号整型.
b=a,是b的内存中二进制形式也为11111111 111111,

在输出时把a,当成有符号数就是-1,b当成无符号数就是65535.

问题的实质在于对11111111 111111进行两种不同的解释,是补码还是无符号原码.

一楼的说的很对.有符号数和无符号数在内存中的存储方式是不同的.正数就是按它的2进制存,负数就是第一位是符号位,其他位是他的补码.

很正常的
没有什么不对