#P2112. 计算机理论知识.原码补码反码
计算机理论知识.原码补码反码
一、机器数和真值
- 机器数
机器数是一个数在计算机中的二进制表示形式。
机器数带符号,最高位为符号位,正数为 0,负数为 1 。
十进制数 +3,计算机字长为 8 位的话,转换二进制为 00000011
十进制数 -3,计算机字长为 8 位的话,转换二进制为 10000011
上述这两个二进制就是机器数。
- 真值
由于符号位的存在,机器数不等于真值。
带符号的机器数,真正的数值。
-3 是真值,它的机器数是 10000011(其形式值为 131(十进制))
二、数的原码、补码和反码表示
- 原码
原码是符号位加上真值的绝对值,即第一位为符号位,其余位表示值。
十进制数 +1 原码为 00000001
十进制数 -1 原码为 10000001
因为第一位是符号位,所以8位二进制的取值范围为:
[11111111,01111111],即 [-127,127]
原码是人脑最容易理解和计算的编码方式。
无符号数用原码。
- 反码
正数的反码是其本身。
负数的反码是其原码基础上,符号位不变,其余各位取反。
= =
= 除符号位之外取反 =
反码不容易被人脑直接看出真值,通常需要转换成原码
- 补码
正数的补码是其本身。
负数的补码是其原码的基础上,符号位不变,其余各位取反,最后 +1。
= = =
= 取反 + 1 = +1 =
补码不容易被人脑直接看出真值,通常需要转换成原码
数值在计算机中是以补码的方式存储的。之所以采用补码而不是原码,是因为在加减乘除运算过程中,补码的运算更加简单、快捷。反过来说,例如,加减法运算,如果基于原码进行运算,是比较复杂的,要分很多情况,5+3,5-3,-5-3,-5+3 .......很多种情况,处理的逻辑不太一样。但是,如果把数字以补码形式来存放之后,就可以基于补码直接运算,情况分类要少很多。因为,加减法运算都是在 CPU 里面基于集成电路实现的,越简单越有利于 CPU 的快速运算,所以,计算机都采用了补码的方式存放和运算数据。
下面举一个例子:计算 5-3,计算机为了简化计算的逻辑,会把减法运算转化成加法,所以,5-3 = 5+(-3)
5 的补码是 :00000101 -3 的补码是:11111101
上面两个补码连同符号位直接相加,得到 00000010 (最高位有溢出,不管),就是十进制的 2 。我们都知道 5-3 的确等于 2 。大家还可以自己构造更多的例子来加以验证。
三、数的顶点表示和浮点表示
在计算机中小数点一般有两种表示法:一种是小数点固定在某一位置的定点表示法;另外一种是小数点的位置可以任意移动的浮点表示法。相应于这两种表示的计算机分别称为顶点计算机和浮点计算机。
- 定点表示法(略略知道就可以了)
机器中所有数的小数点位置是固定不变的。因而小数点就不必使用记号表示出来。实际上,小数点可固定在任意一个位置上。
- 浮点表示法(这是考试重点)
在数的顶点表示法中,由于数的表示范围较狭窄常常不能满足各种数值问题的需要。为了扩大数的表示范围,方便用户试用,计算机常采用浮点表示法。表示一个浮点数,要用两部分:尾数和阶码。尾数用以表示数的有效数值;阶码用于表示小数点在改数中的位置。
计算机多数情况下采用浮点数表示数值,它与科学计数法相似,把一个二进制数通过移动小数点位置表示成阶码和尾数两部分。
其中 是 的阶码,是有符号的整数。 是 的尾数,是数值的有效数字部分,一般规定取二进制顶点纯小数形式。
例:
=
=
=