第二章 数据信息的表示

数据表示的目的及设计数据格式应考虑的因素

数据表示的作用,就是将数据按照某种方式组织,以便机器硬件能直接识别和引用
选择计算机数据表示时,一般考虑以下因素

  • 数据类型:满足应用对数据类型的需求
  • 表示范围和精度:满足应用对精度和范围的需求
  • 存储和处理的代价:降低硬件资源的消耗,提高处理速度
  • 软件的可移植性:便于软件移植

数值数据的表示

数值数据有确定的数,表示数的大小,非数值数据只用来表示符号和文件,没有值的含义

数的机器码表示

用数的符号和数值一起编码成二进制的形式来表示数据,常用的有原码、反码、补码、移码

原码表示

对于整数,最高位为符号位,其余位和真值一样
对于小数,小数点前的为符号位,小数点后的和真值一样

反码表示

反码符号位的表示,和原码相同,1表示负,0表示正
其余位,如果为整数,和真值保持一致,如果为负数,则真值取反

补码表示

  • 负数的补码,可以用模加上该负数得到
  • 一个小于模的正数相对某模数的补码,就是该正数本身
  • 大于模的正数,在模的意义下,该正数与它减模后得到的数相等

负数补码的求法:

  • 根据定义求:小数的模为2(一位符号位),正数的模为(2的所有位的个数次方)
  • 利用反码求:在反码最低位加1,就得到补码
  • 扫描方法求:对数值位按照从低到高的顺序扫描,尾数第一个1及其右边的0保持不变,该1左边的部分,全部取反,然后符号位置1

移码表示

移码是真值x加上一个常数后获得的,该常数也称为偏移值,移码通常用于表示浮点数的接码

IEEE浮点数据表示

主流计算机采用IEEE 754标准表示浮点数,由符号位S、阶码E、尾数M组成
32位单精度:S1位,E8位,M23位
64位双精度:S1位,E11位,M52位
扩展双精度:S1位,E≥15位,M≥63位

在32位单精度中,阶码E采用移码表示,偏移值127,尾数部分的小数点左边,隐藏了一个1,完整的尾数为1.M,对应的表示形式为
N=(-1)^S * 2^(E-127) * 1.M

根据E和M取值不同,IEEE 754浮点数有不同的意义

  • E=0, M=0:表示机器零
  • E=0, M≠0:表示一个非规格化的浮点数
  • 1≤E≤254:表示一个规格化的浮点数
  • E=255, M=0:表示一个无穷大的数x/0
  • E=255, M≠0:表示非数值NaN,对应0/0

浮点数的规格化

在运算过程中,为了保证精度,要求尾数最高位为非零,也就是说,如果尾数不为0,则要求其在10进制下,绝对值大于或等于1/2,这是浮点数规格化的基本要求
正数规格化浮点数形式:0.1xxxx
负数规格化浮点数形式:1.0xxxx
由于-1/2的补码形式为1.1000…,为了方便机器判断,所以约定它不是规格化数

当浮点数的绝对值过大,或者过小时,无法表示,称为溢出
阶码位数越多,能表示数的范围越大,尾数位数越多,表示数的精度越高

十进制与二进制的编码与运算

  • 有权码:常用的8421编码(BCD编码)
  • 无权码:余3码,格雷码

非数值数据的表示

字符的表示方法

ASCII码:一共128个字符,包括33个控制字符,10个十进制数码,52个英文字母,33个专用符号

汉字编码

输入码

一般使用形码(五笔)或音码

机内码

机内码是计算机内部存储和处理汉字时使用的编码,机内码与区位码的对应关系是:区位码+A0A0H

字形码

输出时采用图形方式(点阵形式)

数据信息的校验

数据在处理、传输、存储过程中,可能会出现错误,为了检测或纠正错误,在被校验的数据后增加一些冗余码

码距与数据校验

通常将一组编码中任何两个编码之间代码不同的位数称为这两个编码的编码距离,简称码距,又称海明距离,例如0011和0001,仅有1位不同,码距为1

奇偶校验

通过检测校验码中1的个数,来判断对错
奇校验的校验码中,1的个数为奇数
偶校验的校验码中,1的个数为偶数

海明校验

海明校验实质上是多重奇偶校验,它通过在数据位之间插入k个校验位来扩大码距,从而实现检错和纠错

校验位的位数

校验码一共为N位,其中有效信息k位,校验位r位,也就是 N = k + r
如果要求海明码能指出并纠正一位错误,应当满足N = k + r ≤ 2^r - 1

k12~45~1112~2627~57
r23456

分组原则

将N位校验码依次排列,以N=11,K=7,R=4的情况举例,其中Hn代表的是对应的位置(没有实际意义),Kn代表的是有效信息位,在表中是K1-K7,Rn代表附加的校验位R1-R4
可以发现,有效信息位和校验位是打乱后,放在校验码中,但是各自内部,还是按照顺序排序的
其中,2^n的位置,放校验位Rn,因此将H1、H2、H4、H8替换成校验位R1-R4,剩下的按顺序替换为K1-K7

位号1234567891011
HnH1H2H3H4H5H6H7H8H9H10H11
R1R2K1R3K2K3K4R4K5K6K7

编码、查错、纠错原理

以4位有效信息K1-K4,k=1011,3位校验位R1-R3举例来说明查错纠错原理,

位号1234567
校验R1R2R1+R2R3R1+R3R2+R3R1+R2+R3
HnH1H2H3H4H5H6H7
R1R2K1R3K2K3K4
R1R21R3011

其中,这7位每1位,都被一个或多个校验码校验,可以把R1-R3校验的位号整理成表

校验位R1R2R3
位号H1, H3, H5, H7H2, H3, H6, H7H4, H5, H6, H7
有效数据位K1, K2, K4K1, K3, K4K2, K3, K4

如何取得校验位的值,利用异或运算
R1 = K1^K2^K4 = 1 ^ 0 ^ 1 = 0
R2 = K1^K3^K4 = 1 ^ 1 ^ 1 = 1
R3 = K2^K3^K4 = 0 ^ 1 ^ 1 = 0

因此,最终的校验码为

位号1234567
0110011

上述有3个校验位,被分成三组分别进行校验,因此产生三位指错字G1-G3
G1 = R1^K1^K2^K4
G2 = R2^K1^K3^K4
G3 = R3^K2^K3^K4
三位指错字一共表示八种状态,其中000表示没有出错,例如校验时,得到的指错字是011,则G1=0代表R1,K1,K2,K4这几位是没有错误的,而G2=1,G3=1,代表其中存在错误,仔细观察,发现G1中没有K3,而G2和G3中均有K3,得到K3出错的结论,将K3取反,则得到正确结果

循环冗余校验CRC

循环冗余校验是一种基于模2运算建立编码规则的校验码

模2运算

模2加减:与普通加减运算相比,不产生进位,等价于异或运算
模2乘法:与普通乘法相比,进行部分积相加时,不产生进位
模2除法:求余数时,不借位,按模2加减的运算规则进行计算,上商时,如果部分余数首位为1,则商1,否则商0,当部分余数的位数小于除数的位数时,该余数为最后的余数

循环冗余校验

  • 选择一个生成多项式
  • 根据生成多项式,将有效数据位左移r位,空出的r位用于存放校验位
  • 将移位后的数,对生成多项式进行模2除法,得到的余数,即为校验位的值
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值