(计算机组成原理)第二章数据的表示和运算-第二节2:原码反码补码和移码的作用

Posted 快乐江湖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(计算机组成原理)第二章数据的表示和运算-第二节2:原码反码补码和移码的作用相关的知识,希望对你有一定的参考价值。

一:原码直接运算的弊端

前面我们刚说了各种码,计算机中的各种数是要经过大量运算的,如果在这里我们不管别的,直接按照习惯采用原码对应二进制位相加的话,如果是无符号数那么结果正确,比如下面

但是如果它们表示的是有符号数呢,那么计算的结果明显是错误的

所以这也就有要求计算机能够识别加减法运算,并能做出相应调整。算术逻辑单元也要有加法器和减法器才行,加法器实现成本较低,但是减法器成本太大,所以一个可行的方案就是使用加法代替减法

二:如何使用加法实现减法

如下有一个始终,开始时指向的是10,如果要让其指向7,那么有两种方法:逆时针旋转至7或顺时针旋转至7。

如果是逆时针旋转就相当于减法10-3=7,顺时针旋转应该加多少呢?,应该加的是9,然后使用19%12=7

这个例子反映了一个道理:一个减法操作可以转换为一个与之对应的加法操作,而这里采用的是取余。-3和9在 M O D 12 MOD 12 MOD12这样的情况下是等价的。-3和9对12取余都是9,还有很多的数在MOD12下是等价的,比如21,33,-15等等。同时这些数之间的差距均为12。

因此上面例子中10+(-3)和10+9就是等价的,运算之后再mod12就得到结果

在上面的条件中我们两个等价的数绝对值的和(m)称为模,两个数互为补数,比如-3和9。因此在(mod m)的条件下,若能找到负数的补数,就可以用正数的加法代替减法,怎么找呢?

− a ( a > 0 ) 的 补 数 = 模 − ∣ a ∣ -a(a>0)的补数=模-|a| a(a>0)=a

以下面的例子为例

要完成运算,只需要找到-14的补数即可,这里机器字长为8bit,因此其表示的数的范围为0~2 8 − 1 ^{8}-1 81,这个 2 8 − 1 2^{8}-1 281就相当于表盘上的12,所以当表示范围超时时,数字只会被映射在这个范围内,也就是说计算机天然的完成了 2 8 2^{8} 28的操作

因此-14的补数为 + 1 , 00000000 +1,00000000 +1,00000000- 00001110 00001110 00001110= 11110010 11110010 11110010大家认真观察就可以发现-14的补数其实就是-14的补码,接着完成运算,其结果就是0

以上是关于(计算机组成原理)第二章数据的表示和运算-第二节2:原码反码补码和移码的作用的主要内容,如果未能解决你的问题,请参考以下文章

(计算机组成原理)第二章数据的表示和运算-第二节1:定点数的表示(原码反码补码和移码)

(计算机组成原理)第二章数据的表示和运算-第二节5:定点数乘法运算(原码/补码一位乘法)

(计算机组成原理)第二章数据的表示和运算-第二节6:定点数除法运算(原码/补码一位除法)

(计算机组成原理)第二章数据的表示和运算-第二节3:定点数的移位运算(算数移位逻辑移位和循环移位)

(计算机组成原理)第二章数据的表示和运算-第二节7:详解C语言中的强制类型转换

(计算机组成原理)第二章数据的表示和运算-第二节8:数据的存储和排列