1.5.1 符号数的表示方法
表示一个带符号的二进制数有3种方法。 1.原码法 例如: 8位二进制符号数(+45)10和(-45)10,可以如下写出: (+45)10=(0 0101101)2 ↑ ↑ 符号 位数值 (-45)10=(1 0101101)2 ↑ ↑ 符号位 数值 2.反码法 在计算机的早期,曾采用反码法来表示带符号的数。对于正数, 其反码与其原码相同。 例如: (+45)10=(00101101)2 也就是说正数用符号位与数值凑到一起来表示。对于负数,用相 应正数的原码各位取反来表示,包括将符号位取反,取反的含义就是将 0变为1,将1变为0。例如,(-45)10的反码表示就是将上面 (+45)10的二进制数各位取反: (-45)10=(11010010)2同样,可以写出如下几个数的反码表示,以便 读者对照: (+4)10=(00000100)2 (-4)10=(11111011)2 (+7)10=(00000111)2 (-7)10=(11111000)2 (+122)10=(01111010)2 (-122)10=(10000101)2 3. 补码法 在微处理机中,符号数是用补码(对2的补码)来表示的。用补码法表示带符号数的法则是:正数的表示方法与原码法和反码法一样;负数的表示方法为 该负数的反码表示加1。 例如,(+4)10的补码表示为(00000100)2,而(-4)10用补码表示时,可先求其反码表示(11111011)2,而后再在其最低位加1, 变为(11111100)2 。这就 是(-4)10的补码表示,即(-4)10=(11111100)2。同样,我们把前面提到的几个数的补码表示列在下面供读者参考: (+7)10=(00000111)2 (-7)10=(11111001)2 (+122)10=(01111010)2 (-122)10=(10000110)2
1.5.2 补码的运算 例如: 有两个二进制数10000100和00001110,当规定它们是不带符号的数时,则它们分别表示(132)10和(14)10,将这两个二进制数相加: 10000100 + 00001110 _____________ 10010010 在微处理器中,一般都不设置专门的减法电路。遇到两个数相减时,处理器就自动地将减数取补,而后将被减数和减数的补码相加来完成减法运算。 例如,(69)10(26)10=? 可以写成(69)10+(26)10。利用(69)10的原码和(26)10 的补码相加,即可以得到正确的结果读者可以自己进行验证。 例如: 两个带符号数(01000001)2(十进制数+65)与(01000011)2(十进制数+67)相加: 01000001 + 01000011 ____________ 10000100 再来看两个负数(10001000)2和(11101110)2的相加情况。 10001000 + 11101110 ____________ 101110110 此外,在微处理机中还会遇到不带符号数的运算。
例如: 两个无符号数(11111101)2和(00000011)2相加: 11111101 + 00000011 ____________ 100000000
1.5.3数的定点表示和浮点表示 1. 数的定点表示法 当小数点固定在最高有效位的前面时,定点数为纯小数,其格式如图所示:
↑ 数码 小数点
2. 数的浮点表示法 在十进制中,一个数可以写成多种表示形式。 例如: 83.125可写成10^2×0.83125,10^3×0.083125,10^4×0.0083125。同样,一个二进制数,也可以写成多种表示形式。 例如: 二进制数1011.10101可以写成2^4×0.101110101,2^5×0.0101110101,2^6×0.00101110101等等。 可以看出,一个二进制数能够用一种普遍的形式来表示: 2^E×F 其中E称为阶码,F叫做尾数。我们把用阶码和尾数表示的数叫做浮点数,这种表示数的方法称为浮点表示法在浮点表示法中,阶码通常为带符号的整数, 尾数为带符号的纯小数。浮点数的表示格式如下:
↑
小数点
很明显,浮点数的表示不是唯一的。当小数点的位置改变时,阶码也随 着相应改变,可以用多种形式来表示同一数。 可见,若浮点数的表示格式为:
1位 R位 1位 P位
则可以看到,用这种编码所能表示的数的数值范围为:
前面的二进制数1011.10101可以用包括符号在内的8位阶码,16位尾数的 规格化形式表示如下: