一个c语言题

一个c语言题为什么答案是-1

这个题跟整数的储存方式有关。
unsigned short类型:占两个字节,即16位,没有符号位,计数范围从0000 0000 0000 0000(0)~1111 1111 1111 1111(65535)。当把65535赋值给a时,对应地址里储存的是1111 1111 1111 1111。
int类型:也是占两个字节(16位),但有一位符号位,最高位为1时为负数,计数范围是(负数用补码表示)从-32768~+32767:
0111 1111 1111 1111(最大正数32767)
0000 0000 0000 0001(最小正数1)
0000 0000 0000 0000(0)
1111 1111 1111 1111(最大负数-1)
1000 0000 0000 0000(最小负数-32768)
能够看出,当把a(16个1)赋值给b时,b的值也是16个1,但这16个1用%d格式打印时,因%d格式对应int型变量,而16个1在int类型解读为-1,所以,输出-1。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-05-21
short a=65535;使变量a的二进制为16个1,表示这个数就是-1,将它赋给int型变量b时要对a进行称号位扩展,最后得到32位二进制1。输出的是b,自然就是-1了。
第2个回答  2017-05-21
整型的每一种都有无符号(unsigned)和有符号(signed)两种类型,一般int能存储的数据的范围为-32768~32767,而unsigned能存储的数据范围则是0~65535。由于在计算机中,整数是以补码形式存放的。根据最高位的不同,如果是1,有符号数的话就是负数;如果是无符号数,则都解释为正数
65535转成二进制为:1111 1111 1111 1111
相似回答