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
请问这个是为什么~~~ 展开
main()
{ unsigned int a ;
int b=-1;
a=b;
printf(“%u”,a);}
该程序运行后的输出结果是___B____。
A)-1 B)65535 C)32767 D)-32768
请问这个是为什么~~~ 展开
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
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是补码吗?请问负数怎么转换成十六进制表示哦?我一直有点犯晕……
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这题我在vc6.0中尝试了一下结果为:4294967295
其实这题要指定运行平台,不同平台有不同结果。
其实这题要指定运行平台,不同平台有不同结果。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
unsigned int a是无符号整型,范围从0~65535.
显然b的值不在a的范围内。溢出了。
显然b的值不在a的范围内。溢出了。
更多追问追答
追问
答案是B哦 无符号整型的范围不是0~2^23-1吗?~
追答
你用的是TC还是VC++?
在TC中,unsigned int a是无符号整型,范围从0~65535.
在VC++中,范围为0~2^32-1(4394967295)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询