中易网

补码问题

答案:1  悬赏:30  
解决时间 2021-01-13 13:35
  • 提问者网友:练爱
  • 2021-01-13 00:47
补码问题
最佳答案
  • 二级知识专家网友:底特律间谍
  • 2021-01-13 01:57
首先,原码反码补码对于正数来说,都是同样的。
这个题目里,两个数都是负数。
对于计算机来说,做负数的加减法比较麻烦,硬件实现不方便,
所以引进了补码和反码表示法,直接用加法以方便计算机的计算。

刚刚我说过,正数原码反码补码表示相同,
那么算负数的时候怎么变成可以直接加起来呢?
先打个比方,按时间12个小时来算
现在的准确时间是4点
有一个表显示的是7点
要校准时间,我们可以将时针退7-4=3格,也可以向前拨12-3=9格
计算机做减法就可以转化成-3=+9

LZ也给了原码反码补码的定义,不过本人认为这些公式比较难记,
正数就不说了,教你算负数:符号位为1代表负数

原码: 如果按LZ给的4位表示的话,3用二进制则为0011(对应权值分别为8421,因为3=2+1,所以8和4对应的位为0,2和1对应的为1.同理可以得到6二进制表示为0110)
那么-3的原码就将第一位符号位0改为1,即1011,-6为1110
反码:符号位不变,其他位求反(0变为1,1变为0)
-3的反码:1|011——>1|100,-6的反码1|110——>1|001
补码:反码尾数加1
-3的补码:1100尾数加1——>1|101,1001尾数加1——>1|010

求出了对应的补码,把两个数加起来最后得到LZ的结果是没有问题的。
但是为什么两个负数相加最后结果是正数呢
不知道LZ注意到没有,-3和-6的补码符号位都是1,它们加起来的时候势必要进位,便从1成为0了,成为正数,这叫溢出,因为你给的表示法是4位的,且最高位为符号位,等于说最高位的权值8不能参与数值运算,那么该4位的数值表示范围内,只有4、2、1这三个权值,能表示的最大值是7而已,就像我们刚才举的钟表例子,等过了12点,钟表又回到了1、2、3……

如果我们换种表示法:用5位,最高位是符号位,0表示正数,1表示负数。剩下的四位还是依旧对应权值8421,那么-3的原码为10011——>反码11100——>补码11101,-6原码——>10110——>反码11001——>补码11010
1|1101+1|1010=11|0111(注意这里的符号位产生了进位,也就为最高位的两个1)
再将11|0111变为原码11|1001,剔除符号位11表示负数外,1001按权值8421对应为8+1=9,这样我们就正确表示为-9了。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息