一个c语言题

一个c语言题为什么答案是-1... 一个c语言题为什么答案是-1 展开
 我来答
Yuqi_Tan

2017-05-21 · TA获得超过8.9万个赞
知道大有可为答主
回答量:9918
采纳率:93%
帮助的人:3422万
展开全部
这个题跟整数的储存方式有关。
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。
White_MouseYBZ
2017-05-21 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6522万
展开全部
short a=65535;使变量a的二进制为16个1,表示这个数就是-1,将它赋给int型变量b时要对a进行称号位扩展,最后得到32位二进制1。输出的是b,自然就是-1了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
outspaceman19
2017-05-21 · TA获得超过1080个赞
知道小有建树答主
回答量:749
采纳率:100%
帮助的人:407万
展开全部
整型的每一种都有无符号(unsigned)和有符号(signed)两种类型,一般int能存储的数据的范围为-32768~32767,而unsigned能存储的数据范围则是0~65535。由于在计算机中,整数是以补码形式存放的。根据最高位的不同,如果是1,有符号数的话就是负数;如果是无符号数,则都解释为正数
65535转成二进制为:1111 1111 1111 1111
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式