补码的编码规则
如何来利用这些硬件的基础来表示我们需要的数据范围呢?就是编码。
在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。
此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。
模的概念
模的概念可以帮助理解补数和补码。“模”是指一个计量系统的计数范围。
如时钟等。计算机也可以看成一个计量机器,它也有一个计量范围,即都存在一个“模”。
例如:时钟的计量范围是 0~11, 模=12。 表示n位的计算机计量范围是 0~2n-1, 模=2n。
“模”实质上是计量器产生“溢出”的量,它的值在计量器上表示不出来,计量
器上只能表示出模的余数。任何有模的计量器,均可化减法为加法运算。
例如:假设当前时针指向10 点,而准确时间是6点,调整时间可有以下两种拨法:
- 一种是倒拨 4小时,即:10-4=6;
- 一种是顺拨 8小时:10+8=12+6=6。
在以12模的系统中,加 8和减 4效果是一样的,因此凡是减 4运算,都可以用加 8 来代替。
对“模”而言,8和 4 互为补数。实际上以 12模的系统中,
11 和 1,10和 2,9和 3,7和 5,6和 6都有这个特性。共同的特点是两者相加等于模。
对于计算机,其概念和方法完全一样。n 位计算机,设 n=8, 所能表示的最大数是 11111111,若再加 1成为 100000000(9 位),但因只有 8 位,最高位 1 自然丢失。又回了00000000,所以8 位二进制系统的模为 2^8 = 256。
在这样的系统中减法问题也可以化成加法问题,只需把减数用相应的补数表示就可以了。
把补数用到计算机对数
的处理上,就是补码。
补码运算
- 正数求补
正整数的补码是其二进制表示,与原码相同 - 负数求反:符号位不变,数值位0变1,1变0
- 负数求补:反码+1
求负整数的补码,将其对应正数二进制表示所有位取反(包括符号位,0变变 0)后加 1。
【例1】求-5的补码。 5 => |-5| => 原码 100 0101 => 反码 1111 1010 => 补码1111 1011
【例2】数 0的补码表示是唯一的。 0 => 0000 0000 => 1111 1111 => 0000 0000
补码求原
为什么补码可以1-1=0?
以8 位二进制系统的模为 2^8 = 256。来计算,从0开始,那么就是2^8-1=255。如下图
在补码中最高位为符号位0正数 1为负数,在自然码中同样是如此 0000 0001 为正1 1000 0001为负1 但是两数相加变-2,所以还是补码高等一筹!!!
在补码中计算 3*5 = 3+3+3+3+3=15
小结
- 补码解决了,符号位参与运算,不需要单独标识。
- 补码解决了,正负 0的表示方法。
- 补码实现了,减法变加法,同样也适应于乘法和除法。