目录
2.1数据表示的作用
数据表示的作用是将数据按照某种方式组织起来,以便计算机硬件能够直接识别和使用。在设计和选择计算机内的数据表示方式时,一般需要综合考虑如下几方面的因素:
(1)数据的类型:支持数值数据和非数值数据
(2)表示的范围和精度:选择适当的数据类型和字长
(3)存储和处理的代价:使设计的数据格式易于表示、存储和处理
(4)软件的可移植性:满足应用需求的前提下,符合相应的规范,方便移植
二进制是现代计算机中数据表示的不二之选,采用二进制可以表示任何数据信息。
2.2数值数据的表示
术语:
计算机中常用寄存器来保存数据,寄存器中每个位称为bit,最高有效位记为MSB,最低有效位记为LSB。
数值数据有确定的值,它表示数的大小,能在数轴上找到它们的位置;非数值数据一般为符号和文字,没有值的含义。
几个常用的2的幂:(最好背住,会大大减小相关题目难度)
数的机器码表示:
1、原码:
最高位为符号位,0为正,1为负,数值位与真值相同。
特征:直观易懂,零的表示不唯一,加减法运算复杂。
2、反码:
二进制的各位数码取反,符号位的表示与原码相同。(正数时,不变,负数时,符号位不变,数值位与原码取反)
特征:零的表示不唯一,用求反操作用逻辑门容易实现,加减运算较原码简单,但是运算最后需要将符号位的进位加到最低位上进行结果修正。
3、补码:
建立的“模”(或“同余”)的概念上。“模”即为符号位进位位的权值。真值为正数的时候,补码与原码一样,真值为负数时,需要增加一个模数。(正数时,不变,负数时,其反码+1)
特征:零的表示具有唯一性,加减运算方法简单,符号位与数值一起参加运算,减法可以用加法来实现,只需将减数带符号位一起求补(按位取反,末位加一)即可。表示范围比原码和反码大。
变形补码:
双符号位补码,也叫“模4补码”(定点小数)。用两个二进制位表示数据的符号,“00”表示正,“11”表示负,常用于运算时检测溢出,当运算结果的符号位为“01”时,发生“上溢出”,当运算结果符号位为“10”时,发生“下溢出”。
4、移码:
用于表示浮点数的阶码, 所以只有整数形式。编码方式是直接将真值x加上一个常数(偏移量),相当于将x沿数轴正方向平移了一段距离。移码保持了真值数据的大小顺序,所以移码可以直接比较大小,为浮点运算带来了方便。
比较补码的公式发现,移码和补码的符号位相反,数值相同,因此,一个数的移码可以将其补码的符号位取反得到。此外,移码表示的零也具有唯一性,形式为1000…0。(正数时,不变,负数时,符号位相同,数值位与补码相同)
用移码表示浮点数的阶码具有的优点如下:
(1)可直接按照无符号数的规则比较两个移码表示数据的大小,便于浮点数比较大小;
(2)有利于简化“浮点机器零”的判断。
定点数的表示
约定计算机中所有数据的小数点位置固定。下面左图为定点小数的格式和表示范围,右图为定点整数的格式和表示范围。
浮点数的表示
小数点位置可以浮动,一种类似十进制科学计数法是表示形式如下:
二进制浮点数需要表示出E和M两部分,其中E称为阶码,是定点整数,M称为尾数,是定点小数。
浮点数的一般格式为:
浮点数的表示范围和精度
浮点数的阶码位数决定数据的表示范围,尾数的位数决定数据表示的精度。机器字长一定时,阶码越长,表示范围越大;阶码位数一定时,尾数越长,浮点数的精度越高。浮点数的表示范围比定点数更大,精度更高。
浮点数的规格化:
使尾数真值最高有效位为1,即使尾数的绝对值大于或等于十进制0.5(二进制0.1)。对非规格化数需要进行“左移规格化处理”或“右移规格化处理”。规格化尾数的最高位“1”可以隐藏,存储时可以增加一个数值位,从而可以提高精度。
IEEE754浮点数标准:定义了单精度浮点数和双精度浮点数的国际标准形式,由符号S、阶码E、尾数M三部分构成。格式如下:
阶码和尾数的位数分配是表示范围和精度的折衷。阶码用移码表示,偏移量为127和1023;尾数用原码表示,符号位在首位,是一般格式中尾数的符号。标准格式与真值之间的关系:
单精度浮点数的编码格式如下表:
表示范围如下表:
单精度浮点数与真值之间的转换方法:
例题:将数(20.59375)10转换成IEEE754单精度浮点数的十六进制机器码。
解:
(20.59375)10=(10100.10011)2=1.010010011X(2)4次方
S=0
E=e+127=4+127=131=10000011
M=010010011
将小数转换为十六进制数通常涉及以下步骤:
1. 分离整数和小数部分:首先,将小数点前后分开处理。整数部分可以直接转换为十六进制,而小数部分则需要特殊处理。
2. 整数部分转换:将整数部分直接转换为十六进制。这可以通过不断除以16并记录余数的方式完成,最后将余数倒序排列得到整数部分的十六进制表示。
3. 小数部分转换:对于小数部分,可以通过乘以16的方式来获取小数点后第一位的十六进制数,然后取整数部分作为结果,接着用小数部分继续乘以16,重复这个过程直到达到所需的精度或者小数部分变为0。
下面是一个具体的例子,说明如何将十进制小数0.625转换为十六进制:
分离整数和小数部分:在这个例子中,整数部分是0,小数部分是0.625。
整数部分转换:由于整数部分是0,它的十六进制表示也是0。
小数部分转换:
0.625 * 16 = 10(取整数部分为1,小数部分为0.25)
0.25 * 16 = 4(取整数部分为4,小数部分为0)
将得到的小数部分的十六进制数依次排列,得到0.625的十六进制表示为0.9(因为在十进制中10对应于十六进制的A,但是在这个上下文中,我们只取小数点后的部分,所以是9)。
所以,十进制小数0.625转换为十六进制是0.9。
这是一个简单快速的方法,适用于大多数常见的小数转换。如果需要更高的精度,可以继续乘以16的过程,直到小数部分为零或者达到所需的精度。
2.3非数值数据的表示
字符表示法
ASCII:使用7bit表示128个字符。几乎所有计算机都支持。注意:ASCII中的数字和数字本身不相等。用一个字节表示一个ASCII时,最高位置为0,即MSB=0,也可设置一个奇校验或者偶校验位
汉字表示法
GB2312国家标准:1981年, 16位表示,又称为国标码或国际交换码
一级常用汉字3755个,按汉语拼音排列;二级常用汉字3008个,按偏旁部首排列;非汉字字符682个
94*94矩阵形成区位码(行---区,列---位):一级汉字 16-55区 二级汉字 56-87区;三级汉字 1-9区 用户自定义10-15区
汉字机内码:计算机内存储和处理汉字时使用的编码,与区位码之间简单对应,即:汉字机内码=区位码+0xA0A0,与ASCII码的最高位为0不同,汉字的每字节最高位设置为1,即当MSB=1时,确定该字节为汉字机内码的一个字节。
字模码(字形码):用点阵表示的汉字自行代码,是汉字的输出形式。字模点阵信息量大,占用存储空间大,字模点阵智能用啦构成汉字库,不能用于机内存储。
2.4数据信息的校验
异或规则
识别奇数错,不能纠错,不保证正确,实现简单,编码效率高
识别奇数错,不能纠错,不保证正确,实现简单,编码效率高