C语言 无符号整型的输出

9.有以下程序:main(){unsignedinta;intb=-1;a=b;printf(“%u”,a);}该程序运行后的输出结果是___B____。A)-1B)65... 9. 有以下程序:
main()
{ unsigned int a ;
int b=-1;
a=b;
printf(“%u”,a);}
该程序运行后的输出结果是___B____。
A)-1 B)65535 C)32767 D)-32768

请问这个是为什么~~~
展开
 我来答
junqimiao
推荐于2017-11-24 · 超过12用户采纳过TA的回答
知道答主
回答量:30
采纳率:0%
帮助的人:31.9万
展开全部
B.不过个人觉得这题没答案才对。平台都没说,怎么会有准确答案呢?
VC6.0肯定不是这个答案,它的int是32位的。如果这题的int是16位的那么就选B。

解释:-1在内存中是以补码形式存储的。补码的二进制为:1111 1111 1111 1111
这个数按照无符号数输出:也就是0xffff 也就是65535.
从可视化的-1怎么转换到补码形式:因为假设你的平台是16位的
-1补码 = 2^16 - |-1| = 1 0000 0000 0000 0000 - 1 = 1111 1111 1111 1111
匿名用户
2011-10-14
展开全部
int型复制给unsigned型,自动转换类型。但是-1不再unsigned的范围中,所以直接底层复制。-1的原码是1000 0000 0000 0001(TC。VC和GCC是1000 0000 0000 0000 0000 0000 0000 0001),补码是1111 1111 1111 1111(TC。VC和GCC是1111 1111 1111 1111 1111 1111 1111 1111)。这个数原样复制给unsigned型,其十进制值为65535(TC。VC和GCC是4294967295)。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-10-14
展开全部
16位系统中一个int能存储的数据的范围为-32768~32767,而unsigned能存储的数据范围则是0~65535。-1的十六进制表示为:0xffff 与65535的16进制表示一致。所以结果为b
追问
0xffff是补码吗?请问负数怎么转换成十六进制表示哦?我一直有点犯晕……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友43b5cfc
2012-10-11
知道答主
回答量:31
采纳率:0%
帮助的人:7.8万
展开全部
这题我在vc6.0中尝试了一下结果为:4294967295
其实这题要指定运行平台,不同平台有不同结果。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zxy_dxh
2011-10-14
知道答主
回答量:14
采纳率:0%
帮助的人:5.8万
展开全部
unsigned int a是无符号整型,范围从0~65535.
显然b的值不在a的范围内。溢出了。
更多追问追答
追问
答案是B哦  无符号整型的范围不是0~2^23-1吗?~
追答
你用的是TC还是VC++?
在TC中,unsigned int a是无符号整型,范围从0~65535.
在VC++中,范围为0~2^32-1(4394967295)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式