怎么解释以下这个反码计算
答案:1 悬赏:10 手机版
解决时间 2021-11-23 07:20
- 提问者网友:
- 2021-11-22 14:02
怎么解释以下这个反码计算
最佳答案
- 五星知识达人网友:空山清雨
- 2021-11-22 15:23
首先 正数的原码、反码、补码不变,机器码的值都等于其绝对值。
对于负数,其组成形式以及代表意义还有机器码的值分别为:
x(真值)+y(真值) = x(原码)+ y(原码)
但是当有负数参与运算时,拿你的例子来说,x= -45,y = 78。要的结果是x+y
如果还是按照原码进行运算,那么结果就会变成
x(真值)+y(真值)---> x(原码) + y(原码)---> (2^7 + (-x)) + y
得到的结果是很大的数,与目的背道而驰。
之所以会这样,是因为机器把符号位也参与运算,那么本身没有意义的1突然变成了最高位。如果按照原码运算,出来的结果会很大。
而基于这样的问题,有了补码运算,如下:
x(真值)+y(真值)---> x(补码) + y(补码)---> (2^8 - (-x))+ y --->
2^8 + x + y = x+y 的补码
为什么最后一步等于x+y的补码呢,我们来分析一下:
如果x+y结果为正,那么再加上2^8直接加到最高位外面去了(2^8 = 1 0000 0000B),2^8等于没加; 机器码结果为 x+y,符合正数的补码;
如果x+y结果为负,那么其绝对值为 (-x-y), 2^8 -(- x - y)正好是其补码;
所以当有负数参与运算的时候要用补码,最终结果也是补码。
这里你的这道题就很好理解了,你负数变了反码,运算以后加1; 而负数反码变补码也是加1;所以最终得到了结果的补码; 幸运的是结果是正数,所以直接等于真值,要不然你还要经过转换。
对于负数,其组成形式以及代表意义还有机器码的值分别为:
- 原码: 1 000 0001B = (符号位)绝对值 = 2^7 + 绝对值
反码: 1 111 1110B = (符号位)绝对值位取反 = (2^8 -1 - 绝对值)
补码: 1 111 1111B = (符号位)绝对值取反加1 =(2^8 - 绝对值)
x(真值)+y(真值) = x(原码)+ y(原码)
但是当有负数参与运算时,拿你的例子来说,x= -45,y = 78。要的结果是x+y
如果还是按照原码进行运算,那么结果就会变成
x(真值)+y(真值)---> x(原码) + y(原码)---> (2^7 + (-x)) + y
得到的结果是很大的数,与目的背道而驰。
之所以会这样,是因为机器把符号位也参与运算,那么本身没有意义的1突然变成了最高位。如果按照原码运算,出来的结果会很大。
而基于这样的问题,有了补码运算,如下:
x(真值)+y(真值)---> x(补码) + y(补码)---> (2^8 - (-x))+ y --->
2^8 + x + y = x+y 的补码
为什么最后一步等于x+y的补码呢,我们来分析一下:
如果x+y结果为正,那么再加上2^8直接加到最高位外面去了(2^8 = 1 0000 0000B),2^8等于没加; 机器码结果为 x+y,符合正数的补码;
如果x+y结果为负,那么其绝对值为 (-x-y), 2^8 -(- x - y)正好是其补码;
所以当有负数参与运算的时候要用补码,最终结果也是补码。
这里你的这道题就很好理解了,你负数变了反码,运算以后加1; 而负数反码变补码也是加1;所以最终得到了结果的补码; 幸运的是结果是正数,所以直接等于真值,要不然你还要经过转换。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯