、、有一个数字 125 、、看看我变的对不对、

、、有一个数字 125 、、看看我变的对不对、
125的二进制是 01111101
最高位变成1 然后取反
10000010
justchao 1年前 已收到1个回答 举报

parasat 春芽

共回答了22个问题采纳率:90.9% 举报

首先,原码反码补码对于正数来说,都是同样的.
这个题目里,两个数都是负数.
对于计算机来说,做负数的加减法比较麻烦,硬件实现不方便,
所以引进了补码和反码表示法,直接用加法以方便计算机的计算.
刚刚我说过,正数原码反码补码表示相同,
那么算负数的时候怎么变成可以直接加起来呢?
先打个比方,按时间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了.

1年前

3
可能相似的问题
Copyright © 2024 YULUCN.COM - 雨露学习互助 - 16 q. 0.290 s. - webmaster@yulucn.com