前言:计算机内部流动的信息分为两大类:数据信息和控制信息。
数据表示的作用
- 将数据按照方式组织,以便于机器硬件可以直接识别和使用。
- 关键:数据的表示范围和精度,数据存储和处理的代价以及软件的可移植性问题。
数据数值的表示
1)数据格式
- 是指使用二进制编码表示实际数据的结构形式,根据有无符号分为无符号数和有符号数;根据小数点的位置分为定点数和浮点数。
- 定点数:包括定点整数和定点小数。定点整数存在上溢问题,定点小数存在精度溢出1问题。
- 浮点数:两个定点数分别表示阶码E(Exponent)和尾数M(Mantissa),其中E是定点整数,M是定点小数,存在上溢和下溢问题,也存在精度溢出问题。在尾数规格化(使尾数真值最高有效位为1)中保证表示唯一,浮点数在数轴上分布不均,越往右浮点数越稀疏,浮点运算不满足结合律:小数+大数=大数。
2)定点数表示
- 真值:用‘+’,‘-’表示符号的数据格式。
- 机器数(码):用0和1表示的符号和数值的数据格式。
- 常见机器码:
(1)原码表示就是符号化的数值,“0”表示整数,“1”表示负数,其在数轴上的表示区间是对称的存在正0和负0两个零,运算较为复杂,一般用于表示浮点数的尾码.
(2)反码符号位与原码相同,表示范围也相同。真值为正数是,反码与原码相同,真值为负时,符号位不变,数值部分要逐位取反。
(3)补码,又称模2的补码,建立在‘模’的概念基础上,模的值即为符号位进位的权值。定点小数模值为2,定点整数模值为2^(n+1),真值为正时,补码等于真值,真值为负时,补码等于真值加上模数,且补码只有唯一的0,这样在表示范围上比原码,反码多表示一个最小负数。目前计算机中整数采用补码进行存储,表示和运算。
(4)移码用于表示浮点数的阶码,整数表示,移码和补码的符号位相反,数值位相同。
注:注意补码的机器零唯一,相比于其他编码多表示一个绝对值最大的负数,小数为-1,整数为-2^n
3)浮点数表示
- 目前浮点数表示遵循IEE754标准;
- 32位单精度浮点数和64位的双精度浮点数分别对应C语言中的float型和double型浮点数。
- 二进制浮点数由数符S,阶码E和位数M组成,阶码用移码表示,位数采用原码数据表示,且隐藏高位1,运算时还原成1.M形式。
4)十进制编码
- 十进制编码可采用BCD,BID,DPD码进行表示。
-
BCD编码
- 8421,2421,余三码;
-
BID编码直接采用二进制表示十进制整数,编码效率最高,但进制转换较为复杂。
-
DPD编码采用十位二进制表示3位十进制整数,编码效率相对BCD码更高,十进制表示容易,需要特殊运算部件支撑。
-
- 十进制浮点数
- 可以避免二进制浮点数运算带来的精度误差问题;
5) 计算机中的数据类型
- 汇编语言中寄存器,存储器操作数本没有数据类型
数据超过计算机所能表示的范围时称为溢出,定点小数中,所有不在数轴刻度上的纯小数都超出了定点小数的精度,无法表示,此时定点小数发生精度溢出,只能采用舍入的方式近似表示。 ↩︎