在C语言中,unsigned int a=65535 ; …………;printf("a=%d",a); 为什么输出结果a=-1

如题所述

a的类型是不带不符号,也就是说有一个变量为a的box中装入了一个数据,而printf中的%d又将a作为带符号数显示,在其他未明确指出时,a显示是一个不带符号数,而你使用了%d要求将a作为带符号数显示,那么显然显示的结果是-1,也就是说,如果a=95,printf("a=%c",a);则会显示成字符a呢!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-07-01
65535二进制应该是全1或者说全F,-1在有符号数中表示就是全F
-1 的二进制表示最高位为1(符号位,为1表示负),最低位为1
内存表示是补码,即原码取反加1,取反符号位不变,就变成了最高位为1最低位为0中间全为1,再加上1,就全为1了

我说明白了吧本回答被网友采纳
第2个回答  2011-07-01
unsign int 的65535和,int型的-1,在内存中的,存储格式是一样的。你用%u,输出就是65535了。似乎,是用补码存储的。你可查相关资料,还没懂欢迎追问。
第3个回答  推荐于2017-11-17
在16位的C编译器中,unsigned int a=65535;存储形式为16位全1。
而当它以16位有符号整数格式解读时,因为其最高位为1,于是按16位补码被解读为一个负数-1。本回答被网友采纳