组成原理(二):数据的机器层次表示
数据是计算机加工和处理的对象,数据的机器层次表示直接影响到计算记得结构和性能。
1、数值数据的表示
在计算机中,采用数字化方式来表示数据,数据有无符号数和带符号数之分,带符号数根据编码的不同有原码、补码和反码3种表示形式。
1.1、计算机中的数值数据
计算机中的数据用二进制数标识,任何数值数据都由一串 "0" 或 "1" 的数字构成。
后缀B表示这个数是二进制,后缀Q表示这个数是八进制,后缀H表示这个数是十六进制,后缀D表示这个数是十进制。
1.2、无符号数和带符号数
无符号数,整个机器字长的额全部二进制位均表示数值位,无符号位,相当于数的绝对值。
带符号数,最高位被用来表示符号位,不再表示数值位。
1.3、原码表示法
原码表示法,一种最简单的机器数表示法,最高位为符号位,符号位为0时表示该数为正,符号位为1时,表示该数为负,数值部分与真值相同。
原码实现乘、除、运算的规则简单;实现加、减运算规则复杂。
1.4、补码表示法
模:一个计量器的容量,用M表示。
同余:两个整数A和B除以同一个正整数M,所得余数相同,称A和B对M同余,即A和B在以M为模时是相等的。
补码的符号位表示方法与原码相同,数值部分的表示与数的正负有关;对于正数,数值部分与真值形式相同;对于负数,将真值部分按位取反,且在最低位加1.
采用补码系统的计算机需要将真值或原码形式表示的数据转换为补码形式,便于运算器对其进行运算。
1.5、反码表示法
对于正数,数值部分与真值形式相同;对于负数,将真值数值部分按位取反。
反码和补码的区别是末位少加一个1。
2、机器数的定点表示与浮点表示
根据小数点的位置是否固定,在计算机中有两种数据格式:定点表示和浮点表示。
2.1、定点表示法
所有数据的小数点位置固定不变。通常,把小数点固定在有效数位的最前面或末尾,形成两类定点数。
2.1.1、定点小数
定点小数即纯小数,小数点的位置固定在最高位有效位之前、符号位之后。定点小数的小数点位置是隐含约定的,小数点并不需要真正的占据一个二进制位。
2.1.2、定点整数
定点整数即纯整数,小数点位置隐含固定在最低有效数位之后。
在定点表示法中,参加运算的数以及运算的结果必须保证落在该定点数能表示的数值范围内,若大于最大正数和小于绝对值最大的复数,统称为 "溢出",此时,计算机将暂时中止运算操作,进行溢出处理。
2.2、浮点表示法
浮点数,小数点的位置根据需要而浮动。
当运算结构大于最大正数时,称为正上溢,小于绝对值最大负数时称为负上溢。计算机一旦产生上溢,计算机必须中止运算操作,进行溢出处理。
2.3、定点、浮点表示法
数值的表示范围,浮点表示法表示的数值范围大于定点表示法;
精度,精度是指一个数含有有效数值位的位数,机器字长越长,有效位越多,精度就越高。浮点数精度小于定点数。
溢出处理,在定点运算时,当运算结果超出数的范围时,就发生溢出;而在浮点运算时,运算结果超出尾数的表示范围不一定溢出。
3、非数值数据的表示
非数值数据,又称为字符数据,通常是字符、字符串等数据。
3.1、字符和字符串的表示
3.1.1、ACII字符编码
计算机内存只能识别和处理二进制代码,字符必须按照一定的规则用一组二进制编码来表示。
字符编码方式用的最广泛的是美国国建信息交换标准字符码(ASCII)。对于ASCII码而言,一个字节右边的7位表示不同的字符代码,最左边1位可以作为奇偶校验位,用来检查错误。
计算机中,常用一个字节来存放一个字符。
3.1.2、字符串的存放
字符串是指一串连续的字符。
通常,它们在存储器中占用一片连续的空间,每个字节存放一个字符代码,字符串的所有元素在物理上是邻接的,这种字符串存储方法称为向量法。
字符串向量存放法是最简单、最节省存储空间的方法,但是字符串需要进行删除和插入时,在删除或插入子字符串需要全部重新分配存储空间,花费较多的时间。
为解决向量法的问题,出现了串表法,该种存储方法中,字符串的每个字符代码后有一个链接字,用以指出下一个字符的存储单元地址。
串表法不要求串中的各个字符在物理上相邻,原则上讲,串中各字符可以安排在存储器的任意位置上。
由于链接字占据了存储单元的大部分空间,使得主存的有效利用率下降。
3.1.3、汉字的表示
汉字国标码:汉字交换码,主要用于信息处理系统之间或者通信系统之间交换信息使用。
汉字区位码:将汉字编码GB2312中的汉字分为94个区,每个区中包含94个汉字,区和位组成一个二维数组,每个汉字在数组中对应一个唯一的区位码。汉字的区位码定长4位,前两位表示区号,后两位表示位号,区号和位号用十进制数标识。
汉字机内码:汉字可以通过不同的输入码输入,但在计算机内部其内码是唯一的。
汉字字形码:确定一个汉字字形点阵的代码,又称汉字字模码或汉字输出码。
4、十进制数和数串的表示
十进制是最常用的数据表示法。
4.1、十进制数的编码
二进制是计算机最适合的数据表示方法,把十进制数的各位数字变成一组对应的二进制代码,用4位二进制来表示1位十进制数,称为二进制编码的十进制数(Binary CodeDecimal),即BCD码。
4.2、8421码
8421码又称自然BCD码,简称NBACB码,4位二进制代码的位权从高到低分别为8、4、2、1,编码特点
4.3、十进制数串
十进制数在计算机中是以数传的形式存储和处理的,十进制在计算机内有两种表现形式:非压缩的十进制数 和 压缩的十进制数。
4.3.1、非压缩的十进制数串
非压缩的十进制数串,一个字节存放一个十进制数或符号的ASCII码。在主存中,这样的十进制数串占用连续的多个字节,为指明一个数串,需要给出该数串在主存中的起始地址和串长。
根据符号所处的位置,分成前分隔式数字串和后嵌入式数字串两种格式。
分成前分隔式数字串:符号位占用单独一个字节,放在数值位之前,正号对应ACSII码为2BH,负号对应ACSII码为2DH。
后嵌入式数字串:符号位不单独占用一个字节,而是嵌入到最低一位数字里。
4.3.2、压缩的十进制串
压缩的十进制串,一个字节可存放两位BCD,码表示的十进制数,既节省了存储空间,又便于直接进行十进制算术运算。
在主存中,一个压缩的十进制数串占用连续的多个字节,每位数字仅占半个字节,值常用8421码表示。符号位占半个字节,存放在最低数值位之后。