原码专题(1)——原码反码补码原理超详解

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/boyaaboy/article/details/102733851

目录
一、大学计算机入门开始讲起的原码反码补码你确定你懂了吗?

一、大学计算机入门开始讲起的原码反码补码你确定你懂了吗?

链接:https://blog.csdn.net/lllunaticer/article/details/84109011

1、两个事实

事实1:说起来你可能不信,计算机的中央处理器CPU只会做加法(只有加法器),不会做减法。

因此提出反码补码概念是为了让计算器可以通过做加法器做减法

事实2:补码确实可以让减法变加法

举例:

在十进制下,如果我们要计算9减去4的值,但不允许用减法,怎么办呢?

答案是计算9+6, 得到15, 然后抛弃高位的数字,只取个位,就得到了9-4的结果5

于是我们把6称作4在十进制下的补码,4也是6的补码(互为补码)

多试几个数我们就会发现,十进制下互为补码的两个数加起来刚好等于10

这里面的道理推导起来也很容易:

设要计算x-y,

x-y => x+(10-y) = 10+x-y, 可以看出x-y的结果与x加上y的补码(10-y)的结果刚好差一个10,如果我们去掉高位,也就相当于去掉了10, 得到的自然就是x-y

在16进制下也是一个道理:

如果要计算C-7=5

先计算7在16进制下的补码,为9(9+7=16)

再计算C+9 = 15(16进制), 去掉高位剩下的就是减法的结果

2、减法变加法

有了上面的例子,我们知道了将减法变加法的诀窍:
1.先求减数的补码
2.再将被减数与补码相加,去掉高位,余下的就是差

依照这个步骤,我们来看看计算机如何将减法变成加法来运算

我们知道,计算机是按二进制来储存数据的

用一个7位二进制数来储存7: 000 0111

我们来思考一个问题,进制是什么意思?

比如十进制,是逢十进一,意思是我这个进制里的单个符号最多只能表示到比这个进制小1的数字九,如果大于或者等于这个进制,就需要用组合的方式来表示,比如十进制里的10,就是0和1这两个数字表示的

十六进制也是一样,单个符号最多只能表示到十五,也就是F,如果我要表示十六,就必须借助10来表示。

而求一个数在某个进制下的补码,关键是要知道这个进制的上限在哪里,十进制是10,比它能计的最大单数9大1,十六进制是16, 比他能计的最大单数F大1

我们可以想象这个7位二进制数从0000 0000 开始计数,他能计到的最大的数是多少呢?是1111 1111于是这个八位二进制数的上限是1111 11111 再加1

因此,如果a是b在这个7位二进制表示下的补码,那么a+b一定要等于111 1111 再加1

我们来看怎么求二进制000 0111的补码

000 0111离最大计数111 1111差多少呢? 当然就是把所有为0的部分补上1就好了,也就是说将000 01111按位取反加到这个数上去:

000 0111

+111 1000

=1111111

于是这个按位取反的操作的结果就称为原来的数(原码)的反码

记得我们刚才提到的吗,进制是这个最大的数还要加上1

所以在刚才的反码上再加上1,得到的数与原来的数相加,结果就是最大的数111 1111 加1

因此经过这个加一的操作,我们得到的就是原码的补码

有了这个补码,按照上面的步骤,我们就可以计算原码作为减数的减法了

猜你喜欢

转载自blog.csdn.net/boyaaboy/article/details/102733851
今日推荐