求高手解答C++入门问题!!!

例:~123的返回值就为-124。先将123转成二进制数01111011,然后各位取反得10000100,最后得-124。问题:10000100的二进制结果为132,就算... 例:~123的返回值就为-124。先将123转成二进制数01111011,然后各位取反得10000100,最后得-124。
问题:10000100的二进制结果为132,就算第一位是符号位,那结果也应该是-4,为什么会是-124呢,求解!!!!
展开
 我来答
敛正雅7f
2011-03-08 · TA获得超过2031个赞
知道大有可为答主
回答量:1553
采纳率:0%
帮助的人:1755万
展开全部
这个应该是反码和补码的问题吧。
首先说几个概念:
正数的补码 与原码相同。
负数的补码 符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1
例如

原码:
7的原码是0 0000111
-7的原码是1 0000111
可见原码无法进行加法计算

反码:
正数:正数的反码与原码相同。
负数:负数的反码,符号位为“1”,数值部分按位取反。
+7= 0 0000111
-7= 1 1111000

补码:
正数:正数的补码和原码相同。
负数:负数的补码则是符号位为“1”,数值部分按位取反后再在末位(最低位)加1。也就是“反码+1”。
+7= 0 0000111
-7= 1 1111001

计算内部都是用补码来存储数值的,所以你这个题的步骤是这样的:
先将123转成二进制数01111011,因为正数补码和原码一致,计算机存的是01111011
然后各位取反得10000100,这时第一位变成1,意味着现在表示的是一个负值,现在要求出这个负值是多少,也是按补码规则,保留符号位,将后面的位取反加1,得11111100,这个值就是-124。
希望你能理解,祝你进步!
loverBB_h
2011-03-08 · TA获得超过274个赞
知道小有建树答主
回答量:424
采纳率:0%
帮助的人:343万
展开全部
~的意思是按位取反,你的考虑少了这个

123的二进制表示是:01111011
按位取反的结果是:10000100
按照8bit算,就是-124
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
BTzjzxxx
2011-03-08 · TA获得超过4533个赞
知道大有可为答主
回答量:981
采纳率:0%
帮助的人:650万
展开全部
有符号整数使用的是补码表示,而非原码

10000100是补码,求其值时是去掉符号位,后面的取反加1,即1111011+1=1111100,也就是4+8+16+32+64=124

所以是-124

参考资料是百科中“补码”的条目,你可以看一下

参考资料: http://baike.baidu.com/view/377340.htm

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式