第二章 计算机中的数据表示
一、数据编码
2.1 数值数据编码
1.原码
例如:X=+35,[X]原=00100011
X=-35,[X]原=10100011
X=0.46875,[X]原=0.0111100
X=-0.46875,[X]原=1.0111100
原码范围:
整数:-(2(n-1)-1)~+(2(n-1)-1) 如8位:-127~+127
小数:-(1-2(-(n-1)))~+(1-2(-(n-1))) 如8位:-0.1111111 ~ +0.1111111
2.补码
正数的补码与原码定义相同;
负数补码以X=-35为例:
(1)将X=+35的原码表示,包括符号位在内各位取反,再在最低为上加一
(2)将X=+35的原码表示,从最低位逐位向高位找起,找到第一个1不变,以后各位1变0、0变1直至符号位
补码范围:
整数:-2(n-1)~+(2(n-1)-1) 如8位:-127~128
小数:-1~+(1-2^(-(n-1)))
3.反码
正数不变;
负数取反。
取值范围同原码
4.移码
求法:先求[X]补,再将符号位取反
2.2 浮点表示
1.浮点数的一种表示形式:
阶符 阶码 数符 尾数
2.非规格化浮点数
基数为2,阶码数值位取k位,阶符1位且采用补码表示;尾数数值位取n位,数符1位,同样采用补码表示。
取值范围:
最小负数:-12(2k-1)
最大负数:-2(-n)*2(-2^k)
最小正数:2(-n)*2(-2^(k))
最大正数:(1-2(-n))*2(2^k-1)
3.规格化浮点数
(1)当尾数M用补码表示,且M>=0时,M=0.1XXXX,当M<0时,M=1.0XXXX;
[-1/2]补=1.10000…00,[-1]补=1.00000…00
为了使计算机判断方便,一般不把[-1/2]补列为规格化数,而把[-1]列为规格化数
经修正后,只需判断尾数的符号位与第一数值位是否一致,若不一致则就是规格化数。
(2)取值范围:
最小负数:-12(2k-1)
最大负数:-(1/2+2(-n))*2(-2^k)
最小正数:+1/2*2(2(-2^k))
最大正数:(1-2(-n))*2(2^k-1)