挑战408——组成原理(3)——原码,补码,反码

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/redRnt/article/details/83107713

计算机中的数据分为数值数据和非数值型数据(如声音,图像等等)。我们接下来主要谈的是数值型数据。
在现实的生活中,数值数据主要分为实数和整数两大类,在计算机中,整数用定点数表示,实数用浮点数表示,而所有带符号的整形都用补码表示。目前通用计算机中浮点数大多数采用IEEE754标准,其中尾数采用定点原码表示,所以浮点数的算术运算涉及原码的加减乘除运算。

无符号数与有符号数

无符号数,即没有正负号的数,是数的绝对值,在其面前添上正负号,便成了有符号的数。计算机的数均存放在寄存器中,通常我们称寄存器的位数为机器字长,当存放有符号数的时候,需要占用以为存放符合位,所有,如若机器字长为16位,那么:

  • 无符号数可表示的范围为 0 — 2^(16) -1
  • 有符号数可表示的范围为 -2^15 — 2^(15) - 1

15次方是因为符号位占用了一位。
那么计算机如何表示有符号数呢?我们规定,用0表示正号,用1表示负号,这样符号也就被数字化了,并规定放在有效数据之前,例如:
+0.1011 在机器中表示为0(小数点位置)1011
-1100 在机器中表示为1,1100(小数点位置)
为了方便区分手写的数和将符号数字化的数,我们把前者称为真值,后者称为机器数。即
-1100(真值) -> 11100(机器数)
将符号数字化以后带来了新的问题,运算时,符号位是否参与运算,如果是,那么如何处理?为了处理好这些问题,于是就引入了原码,补码,反码和移码等编码方式。

原码

原码,又称带符号的绝对值表示,符号位为0表示正,为1表示负。用大白话来讲,就是直接将数值部分写成二进制数然后前面添上0或者1,用来表示正负号。
在这里插入图片描述
在这里插入图片描述
其实上面的公式我们只需要了解即可,实际的转换很简单
比如X = +1110时 [X]原 = 0,1110
X = -1110时 [X]原 = 1,1110 (逗号只是为了区分符号位实际不存在)
X = 0.1101时 [X]原 = 0.1101
X = -0.1101时 [X]原 = 1,1110(注意不是10.1101,因为0并不是有效数据位)。

注意

  1. 若字长为n+1,那么原码整数的表示范围为:在这里插入图片描述
  2. 原码中0的表示方式有两种:在这里插入图片描述

补码

如果说是这几种码制中最重要的编码方式,一点也不为过。计算机中存放的数值方式大多数是用补码存放,计算(尤其是减法做加法运算时)时也通常采用补码运算方式,因此要对补码非常敏感。

在这里插入图片描述
在这里插入图片描述
对于纯整数:在这里插入图片描述
对于纯小数:
在这里插入图片描述
而对于0而言,
在这里插入图片描述
具体的实例不举先,先看看我们的反码,我们没有必要按上面的数学公式往上套。

反码

反码,通常用来由原码求补码或者由补码求原码的过渡环节。
我们先看看数学定义:
在这里插入图片描述
在这里插入图片描述
对于纯小数:
在这里插入图片描述
对于纯整数:
在这里插入图片描述
所以,记住上面的就够了,我们具体看看运算过程,取反操作就是将原码中的0换成1,1换成0.就完事了。
当X = +1101时,X反 = 0,1101
当X = -1101时,X反 = 1,0010(当为负数的时候,符号位不变,数值位执行取反操作)
当X = +0.0110时,X反 = 0.0110
当X = -0.0110时,X反 = 1.1001

对于0来说,反码的表示方式也有两种(0,000或者1,111),这就自己去写了。

三种码制之间的关系(最重要)

前面的数学公式是应付表示范围类的题目,那么这些内容就是应付计算题的题目:

  • 三种机器码的最高位均为符号位,符号位与数值位用逗号隔开
  • 真值为正时,原码补码反码表示方式相同。
  • 真值为负时,三者表现都不同,但是符号位都用1表示,补码可以用“原码求反(不含符号位)后加1”求得。而反码是原码除了符号位以外的部分都进行取反操作

下面举个简单的计算例子:
在这里插入图片描述

移码

当真值用补码表示的时候,由于符号位与数值位一起编码,这与习惯上表示不同,我们很难从补码形式上直接判断真值的大小。但是如果对每个真值位(注意不包含符号位),都加上一个2^n(n为整数位),那么在数轴上,移码表示的范围恰好对应真值在数轴上移动2的n次方个单元。所以叫做移码。
在这里插入图片描述
它常常用来表示浮点数的阶数,因为它只能表示整数。
对于移码来说,0的表示是唯一的,假设字长为6位(含一个符号位)那么0的表示为:
+0移 = (2^5) + 0 =1,00000
-0移 = (2^5) - 0 =1,00000
特点

  1. 0 的表示方式唯一
  2. 对于同一个真值,移码和补码相差一个符号位,且相反,例如:-11110 补码为1,00010,移码为:000010
  3. 引入移码是为了直观的判断真值大小,所以移码大,真值就大

猜你喜欢

转载自blog.csdn.net/redRnt/article/details/83107713