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

2024-12-15 11:03:09
推荐回答(4个)
回答1:

a的类型是不带不符号,也就是说有一个变量为a的box中装入了一个数据,而printf中的%d又将a作为带符号数显示,在其他未明确指出时,a显示是一个不带符号数,而你使用了%d要求将a作为带符号数显示,那么显然显示的结果是-1,也就是说,如果a=95,printf("a=%c",a);则会显示成字符a呢!

回答2:

65535二进制应该是全1或者说全F,-1在有符号数中表示就是全F
-1 的二进制表示最高位为1(符号位,为1表示负),最低位为1
内存表示是补码,即原码取反加1,取反符号位不变,就变成了最高位为1最低位为0中间全为1,再加上1,就全为1了

我说明白了吧

回答3:

unsign int 的65535和,int型的-1,在内存中的,存储格式是一样的。你用%u,输出就是65535了。似乎,是用补码存储的。你可查相关资料,还没懂欢迎追问。

回答4:

在16位的C编译器中,unsigned int a=65535;存储形式为16位全1。
而当它以16位有符号整数格式解读时,因为其最高位为1,于是按16位补码被解读为一个负数-1。