C语言:int b=-2;printf("%u\n",b);输出结果:65534 求计算过程

最好举些例子(如b=-1,-3,0等等时,输出结果是什么)... 最好举些例子(如b=-1,-3,0等等时,输出结果是什么) 展开
 我来答
zyh1141298056
推荐于2016-04-22 · TA获得超过1308个赞
知道小有建树答主
回答量:500
采纳率:100%
帮助的人:597万
展开全部
从你的结果来看,你的编译器将整形视为2个字节大小。这个对结果的分析没什么影响。机器中的数据都是以补码的形式存储的,最高位表示符号,正数的补码是其本身,负数的补码是其绝对值的二进制按位取反加1得到的二进制码。对于你这里的-2来说,2的二进制表示为
0000000000000010
那么-2的补码就是将上述二进制按位取反再加1
取反得:1111111111111101
再加1得:1111111111111110
这就是-2在机器中的存储形式,你现在是要以%u的形式,也就是无符号的整数,那么上面的那个二进制串的最高位就不是表示符号了,把它转换成10进制就是65534
yang_zhenpeng
2012-04-19 · 超过14用户采纳过TA的回答
知道答主
回答量:64
采纳率:0%
帮助的人:38.2万
展开全部
%u是指按照无符号十进制输出,-2在内存中是按照补码存储的,即-2的存储形式是2的各位取反再加1,2:0000 0000 0000 0000 0000 0000 0000 0010,取反后:1111 1111 1111 1111 1111 1111 1111 1101,加1 : 1111 1111 1111 1111 1111 1111 1111 1110,最高位为1表示这个数是负数,按照无符号十进制输出时,最高位也计算入内,不再计入符号位,所以输出的数变为:2^1 +... + 2^31 = 4294967294.同理,-1, -3, 0输出分别为:4294967295, 4294967293, 0.以上结果在visual studio2010中运行,int为4个字节。
追问
为什么b=-1,-3时输出结果为10位,-2时是5位啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
大林因
2012-04-19 · TA获得超过228个赞
知道小有建树答主
回答量:169
采纳率:0%
帮助的人:149万
展开全部
可以看出来你是在16位系统上运行这程序得到的结果.

其实你想问的是有符号型整数与无符号型整数的转换关系而已.

有符号型整数的最高位表示 符号, 负数情况下为1, 而无符号型整数的最高位表示数值.

-1 => 65535
-3 => 65533
0 => 0
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
rssg888
2012-04-19 · TA获得超过1032个赞
知道小有建树答主
回答量:330
采纳率:0%
帮助的人:369万
展开全部
要理解这个,先要了解补码的概念
看了这个你就明白了
http://wenku.baidu.com/view/d259820f79563c1ec5da71e2.html
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式