原码
原码表示法
用最高位表示符号位,‘1’表示负号,‘0’表示正号。其他位存放该数的二进制的绝对值。
优缺点
采用源码表示法简单易懂,即符号位加上二进制数的绝对值,但他最大的缺点就是加法运算复杂。
加法运算复杂,什么意思呢?
- 如果是同号相加,则两数的数值相加。
- 但如果是异号相加,则要进行减法,而在进行减法时
1.首先还要比较绝对值的大小
2.然后大数减去小数
3.最后还要结合结果选择恰当的符号
反码
反码表示法
正数的反码还是等于原码
负数的反码就是他的原码是除符号位外,按位取反。
举例
(1)3是正数,反码与原码相同,则可以表示为0011
(2)-3的原码是1011,符号位的“1”保持不变,数值位(011)按位取反得(100),所以
-3的反码为1100
补码
补码表示法
正数的补码等于他的原码
负数的补码等于反码+1(这只是一种算补码的方法,只不过是补码正好就等于反码加1罢了)
补码还有另一种计算方法
负数的补码等于他的原码自低位向高位,尾数的第一个‘1’及其右边的‘0’保持不变,左边的各位按位取反,符号位不变。
以上两种方法只是补码的计算方法,而不是定义,不要误解为定义。
补码就是负数在计算机中的二进制表示方法
举个例子
例如:-5的二进制是啥呢?
5的二进制原码为:0000 0101
反码为:1111 1010
补码为:1111 1011(这就是-5在计算机中的表示方法)
补码的定义
在《计算机组成原理》1中,以钟表为例说明补码概念。
假设现在的标准时间为4点,而有一只表已经7点了,为了校准时间可以采用两种方法:
- 将时针退7-4=3格
- 将时针向前拨12-3=9格
这两种方法都能对准到4点,由此可以看出,减三和加九是等价的。9和(-3)是对12的补码,可以用数学公式表示为:
-3=+9 (mod 12)
mod 12的意思是12为模数,这个“模”表示被丢掉的数值。上式在数学上称为同余式
。
上例中的之所以7-3和==7+9(mod12)==等价,原因是钟表的指针超过12后,就将12自动丢掉了,最后得到
16-12=4
.同样地,以12为模时:
-3=+9 (mod 12)
-3=+9 (mod 12)
从定义中我们可以得到一个结论,就是负数用补码表示时,可以把减法转化为加法。
通俗点说就是:加一个负数(减一个数)=加上这个数的补码(mod 模数
)
补码转十进制
正数
一个数如果为正,则它的原码、反码、补码相同;一个正数的补码,将其转化为十进制,可以直接转换。
负数
负数就比较麻烦了,这里介绍两种方法:
方法一:
例如:(11111010)
=-27 * 1 + 26 * 1 + 25 * 1 + 24 * 1 + 23 * 1 + 22* 0 + 21 * 1 + 20 * 0
=-128+64+32+16+8+0+2+0
=-6
方法二:
1、先对各位取反;
2、将其转换为十进制数;
3、加上负号,再减去1。
例如:(11111010)
- 首先最高位为1,是负数,先对各位取反得00000101
- 转换为十进制数得5
- 加上负号得-5,再减1得-6
《计算机组成原理》(第五版·立体化教材) 白中英、戴志涛主编 ↩︎