求高手解答C++入门问题!!!
例:~123的返回值就为-124。先将123转成二进制数01111011,然后各位取反得10000100,最后得-124。问题:10000100的二进制结果为132,就算...
例:~123的返回值就为-124。先将123转成二进制数01111011,然后各位取反得10000100,最后得-124。
问题:10000100的二进制结果为132,就算第一位是符号位,那结果也应该是-4,为什么会是-124呢,求解!!!! 展开
问题:10000100的二进制结果为132,就算第一位是符号位,那结果也应该是-4,为什么会是-124呢,求解!!!! 展开
展开全部
这个应该是反码和补码的问题吧。
首先说几个概念:
正数的补码 与原码相同。
负数的补码 符号位为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。
希望你能理解,祝你进步!
首先说几个概念:
正数的补码 与原码相同。
负数的补码 符号位为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。
希望你能理解,祝你进步!
展开全部
~的意思是按位取反,你的考虑少了这个
123的二进制表示是:01111011
按位取反的结果是:10000100
按照8bit算,就是-124
123的二进制表示是:01111011
按位取反的结果是:10000100
按照8bit算,就是-124
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
有符号整数使用的是补码表示,而非原码
10000100是补码,求其值时是去掉符号位,后面的取反加1,即1111011+1=1111100,也就是4+8+16+32+64=124
所以是-124
参考资料是百科中“补码”的条目,你可以看一下
10000100是补码,求其值时是去掉符号位,后面的取反加1,即1111011+1=1111100,也就是4+8+16+32+64=124
所以是-124
参考资料是百科中“补码”的条目,你可以看一下
参考资料: http://baike.baidu.com/view/377340.htm
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询