定义了unsigned int 为何用%d输出不用呢?

假设int类型数据占两个字节,如果定义unsignedinta=65535,则语句printf(“%d”,a);的输出结果是(b)A、65535B、-1C、1D、-327... 假设int类型数据占两个字节,如果定义unsigned int a=65535,则语句printf(“%d”,a);的输出结果是( b)A、
65535
B、
-1
C、
1
D、
-32767
为什么答案是b呢?不应该是a吗?
展开
 我来答
sxndzsr
推荐于2018-02-11 · TA获得超过244个赞
知道答主
回答量:39
采纳率:100%
帮助的人:36.1万
展开全部
因为65535在计算机中存放是以二进制形式的,是1111 1111 1111 1111这样的。由于是unsigned型,所以可以有16位。
但对于int型(%d),只能存放15位,第一位表示的是正负。由于第一位是1,所以%d输出时候应该是负数。而负数是以补码形式存放的。
所以对于1111 1111 1111 1111,它应该是(1111 1111 1111-1)的补码,再加负号,就是0000 0000 0000 0001加负号,就是-1.
来自:求助得到的回答
sjtxfwh
2013-01-03 · 超过13用户采纳过TA的回答
知道答主
回答量:119
采纳率:0%
帮助的人:33.9万
展开全部
计算机是二进制表示数据的,65535的二进制形式是这样的1111111111111111,但是计算机不知道正负,所以第一位一般是符号位1表示负数0表示正数,如果%u输出就表示第一位不是符号位,而是数据位,如果是%d输出那么第一位就是符号位了,有符号的十进制,他是采用补码形式存储的,所以答案应该是-1,这个答案是16为操作系统时候的答案,32为操作系统输出应该是65535。也就是说xp以上操作系统输出就是65535
现在的教材也不改一改坑死人啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友4de7b94
推荐于2016-02-25 · TA获得超过8157个赞
知道小有建树答主
回答量:1423
采纳率:93%
帮助的人:58.6万
展开全部
因为unsigned int在二进制中为16位,而%d在二进制中为15位为所以是输出不了的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ALANWU1992
2013-01-03 · 超过11用户采纳过TA的回答
知道答主
回答量:57
采纳率:100%
帮助的人:29.2万
展开全部
是这样的,题目说int是两个字节,也就是说用16个二进制表示,16个二进制能表示的整数是65 536个,0到65535,这里的65535=1111111111111111B 但是这里printf中是%d,也就是有符号的十进制,他是采用补码形式存储的,所以65535(1111....1B)是-1。 (十进制-1的补码是11111....1B)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
joyoustech
2013-01-03 · TA获得超过1874个赞
知道小有建树答主
回答量:1465
采纳率:71%
帮助的人:1305万
展开全部
%u是输出十进制无符号整数。
追问
还是不懂啊,可是题目里面说的是"%d”啊
65535怎么就会变成-1了呢
追答
有符号的-1和无符号的65535在计算机里是一样的,用二进制就是1111111111111111B,用十六进制就是0xffff
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式