定点数的表示
定点表示:约定机器中所有数据的小数点位置固定不变。由于约定在固定的位置,小数点就不在在使用" . " 来表示
通常将放到数值位最后面或者最前面,这样数据表示成纯整数或纯小数
无符号数的表示
用全部二进制代码表示表示数字,没有符号位
8位二进制无符号数范围
(00000000~11111111 )0~2^8-1(0~255)共256个数
有符号数的表示方法
定点数x =x0 x1 x 2 … xn,在定点机中表示如下(x0: 符号位,0代表正号,1代表负号)
纯小数的表示范围为
( x0x1x2...xn数值位各位均为0时,绝对值最小;数值位各位均为1时,绝对值最大)
0 ≤ |x| 1 - 2^(-n)
-( 1 - 2^(-n) ) ≤ x < 1 - 2^(-n)
即
-0.11...... 1 ≤ x ≤ + 0.11 ...... 1
(n个1) (n个1)
用八位二进制
-0.1111111 ≤ x ≤ 0.1111111
(1111,1111) (0111,1111)
- ( 1 - 2 ^ (-7) ) ≤ x ≤ ( 1 - 2 ^ (-7) )
纯整数的表示
纯整数的表示范围为
(x0 x1 x2 ...xn数值位各位均为0时绝对值最小;数值位各位均为1时绝对值最大)
-( 2^n - 1) ≤ x ≤ 2^n - 1
0 ≤ | x | ≤ 2^n - 1
-11...... 1 ≤ x ≤ + 11 ...... l
32位二进制数定点整数可以表示的范围
-11... .... ... 1 ≤ x ≤ 11... ... ... 1
31个1 31个1
(111……1) (011……1)
-( 2^31 - 1) ≤ x ≤ 2^31 - 1
原码表示法
原码就是数值的真值(绝对值)前面加上一个符号位(正数0、负数1)
(1)x和一x的原码转换:
将 [x] 的符号位(左端第一位)取反,即可得到 [-x ]
(2)原码中0的表示不唯一
纯小数:[+0 ]原=0.00...0 [一0]原 = 1.00...0
纯整数:[+0]原=00...0, [一0]原=100…0
(3)若原码字长为n,总共有2"个编码,但对应的真值只有2”—1个
因为[0]原占用了两个编码,因此原码表示的范围较小(2"个编码只能表示2"一1个真值)注意与补码的不同
移位原则
对于原码左移添0 右移添0
优点:原码简单易懂,与真值转换容易,实现乘除法方便。(乘除法数值位由两数的绝对值相乘
除得到,符号位由两数的符号位异或即可)
不足:①原码中0的表示有两种,给使用带来了不便;
②原码表示的加减法运算复杂,这是因为:当两数相加时,如果是同号则数值相加;如果是异号,则要进行减法。
而在进行减法时还要比较绝对值的大小,然后大数减去小数,最后还要给结果选择符号
补码的性质:
补码 = M + X( 模 + 真值)
(1)几个特殊数值的补码表示:
0的补码表示
[+0]补 = [-0]补 = 2 + 0.00...00 = 0.00...00 (纯小数mod 2)
[+0]补 = [-0]补 = 2" ± 00...00 = 0... 00 (纯整数mod 2"1)
注意 0的补码表示只有一种形式
[x] 和 [一x]的关系
已知 [x]补,将 [x]补 的各位(含符号位)取反然后在最低位上加1,即得到 [一x] 补,反之亦然
补码的算术移位规则:
补码的左移(乘2):符号位不变,数值部分左移,最低位移出的空位填0
补码的右移(除2):符号位不变,数值部分右移,最高位移出的空位填符号位
补码的位扩展
例如将字节(8位二进制)表示的补码扩展为16位二进制表示的补码
定点小数:在最低位用0扩展
定点整数:在最高位用符号位扩展
常用求补码的方法(与定义求补码比较):
a.若x>=0 则 [x]补 = x,符号位为0
若 x<0 ,则将 x 绝对值的各位取反,然后在最低位上加1,符号位为1,即得到 [x] 补。
b. 若 x0 数值位不变,符号位为 0.
若 x<0,数值位从最低位开始,对遇到的0和 第一个1取其原来的代码,对第一个以后开始直至最高位均按位取反,符号位为1。
移码和补码符号位相反