研究机器内的数据表示,目的在于组织数据,方便计算机硬件直接使用。
需要考虑:
支持的数据类型;
能表示的数据精度;
是否有利于软件的移植
能表示的数据范围;
存储和处理的代价;
...
三种常见的机器数:(设定点数的形式为)
把数的范围和精度分别表示的一种数据表示方法。
使用场合:当数的表示范围超出了定点数能表示的范围时。
E: 阶码位数,决定数据的范围
M: 尾数位数,决定数的精度
例如,将x =表示成机器形式。假定用8位表示该数,且阶码占3位,位数占5位(均包含一位符号位)。
答案是1 1 1 1 0 0 1 0
一般表示格式的不足:不同系统可能根据自己的浮点数格式从中提取不同位数的阶码
IEEE 754是一种定义了浮点数表示和运算标准的国际标准。该标准规定了浮点数的二进制表示、舍入规则、溢出处理等方面的细节,以确保在不同计算机系统之间实现浮点数的一致性。
IEEE 754浮点数的表示形式分为单精度(32位)和双精度(64位)两种。
IEEE 754浮点数的基本结构包括三个部分:符号位、指数部分和尾数部分
S | 8位偏指数E | 23位有效尾数M | 单精度 |
S | 11位偏指数E | 52位有效尾数M | 双精度 |
IEEE754尾数形式为1.XXXXXX,其中M部分保存的是XXXXXX(1被隐藏),从而可保留更多的有效位,提高数据表示的精确度。
与上述IEEE754格式相对应的32位浮点数的真值可表示为:
IEEE 754浮点数标准还规定了特殊值,如正无穷、负无穷、NaN(Not a Number)等,以及舍入规则、精度要求等细节:
E=0 , M =0 :表示机器零;
E=0 , M ≠0 :非规格化的浮点数;
1≤ E ≤ 254 :规格化的浮点数;
E=255 , M=0 :无穷大的数,对应于x / 0 (其中x≠0) ;
E=255 , M≠0 :N=NaN,表示一个非数值,对应于0 / 0。
IEEE754 32位浮点数与对应真值之间的变换流程
例如要将十进制数20.59375转换成32位IEEE754格式浮点数的二进制格式。
解:
先将十进制数换成二进制数: 20.59375=10100.10011
移动小数点,使其变成1.M的形式 10100.10011=1.010010011×2 4
得到: S=0, e = 4,E= 100+01111111 =10000011,M = 010010011
最后得到32位浮点数的二进制存储格式为:
0100 0001 1010 0100 1100 0000 0000 0000 = 41A4C000H
受元器件的质量、电路故障或噪音干扰等因素的影响,数据在被处理、传输、存储的过程中可能出现错误;
若能设计硬件层面的错误检测机制,可以减少基于软件检错的代价。
增加冗余码(校验位)
同一编码中,任意两个合法编码之间不同二进数位数的最小值;
0011与0001 的码距为1,一位错误时无法识别;
0000、0011、0101、0110、1001、1010、1100、1111等编码码距为2。任何一位发生改变,如0000变成1000就从有效编码变成了无效编码,容易检测到这种错误。
校验码中增加冗余项的目的就是为了增大码距。
码距越大,抗干扰能力越强,纠错能力越强,数据冗余越大, 编码效率低,编码电路也相对复杂;
1. 增加冗余码(校验位)
2. 有效信息(k位) 校验信息(r=1位)
3. 编码:根据有效信息计算校验信息位,使校验码(数据+ 1位校验信息)中1的个数满足奇/偶校验的要求: (连续异或,偶数个1时结果为0)
0001 ➡ 00011 (偶校验) (校验码偶数个1)
0001 ➡ 00010 (奇校验) (校验码奇数个1)
4. 检错:
偶校验检错码: ,G=0表示数据正常,否则表示出错。
奇校验检错码: ,G=0表示数据正常,否则表示出错。
- 编码与检错简单
- 编码效率高
- 不能检测偶数位错误, 无错结论不可靠,是一种错误检测码
- 不能定位错误,因此不具备纠错能力
- 奇/偶校验码距为 2,如11000011 ➡ 01000010
- 一般在同步传输方式中常采用奇校验,异步传输方式中常采用偶校验
CRC(Cyclic Redundancy Check)校验是一种在数据通信中常用的差错检测技术。它通过对数据进行多项式运算,生成一定长度的冗余校验码,将该校验码附加到原始数据中发送。接收方在收到数据后,进行相同的多项式运算,然后将计算出的校验码与接收到的校验码进行比较,从而检测数据是否在传输过程中发生了错误。
收发双方约定的一个(r + 1)位二进制数,发送方利用G(X)对信息多项式做模2除运算,生成校验 码。接收方利用G(X)对收到的编码多项式做模2除运算检测差错及错误定位。
G(x)应满足的条件:
CRC校验的主要特点包括:
多项式生成器: CRC校验使用一个预定义的生成多项式,通常用二进制表示。该多项式决定了CRC校验码的生成规则。
除法运算: 数据发送方和接收方都执行CRC多项式除法运算。发送方用生成多项式除以数据,并将余数(CRC校验码)附加到数据末尾。接收方执行相同的除法运算,如果余数为零,说明数据没有错误;否则,说明数据可能存在错误。
固定长度的校验码: CRC校验生成的校验码长度是固定的,通常在16位、32位等。这种特性有助于在接收端检测到传输过程中可能发生的错误。
CRC不能纠正错误,但它可以有效地检测出大多数传输错误。
a) 加/减运算:异或运算,加不进位,减不借位
0±0=0,0±1=1,1±0=1,1±1=0
b) 模2除法:按模2减,求部分余数,不借位。
c)上商原则:
①部分余数首位为1时,商为1,减除数;
②部分余数首位为0时,商为0,减0;
③当部分余数的位数小于除数的位数时,该余数即为最后余数。
(1)根据待校验信息的长度k,按照 k+r ≤ 2r-1 确定校验位r的位数
如对4位信息 1100 进行CRC编码,根据
得
(2)根据r 和生成多项式的选择原则,选择位数为 r +1 的生成多项式G(X)= 1011
(3)进行下列变化:将待校验的二进制信息Q(X)逻辑左移 r 位,得到Q(X)’
有效信息(k位) 校验信息(r位) ➡ 1100 000
(4)对Q(X)’按模2运算法则除G(x),求CRC编码中的r位校验信息
(5)用得到的余数替换Q(X)’的最后r位即可得到对应的CRC编码:
1100 000➡1100 010
接收方利用G(X)对收到的编码多项式做模2除运算,余数为0说明传输没有错误;余数不为0说明传输有错。
例如(7,4)编码不同数位出错对应的余数:
若余数不为0,一边对余数补0继续做模2除,同时让被检测的校验码循环左移,当余数为101时, 出错位也移到A1位置。通过异运算纠正后继续循环左移和执行余数模2除法,直到修改后的出 错位回原位。
海明检验基于海明码(Hamming Code),一种特殊的错误检测和纠正码,通过添加额外的校验位来实现。
海明码中的每个数据块包含了原始数据位(数据)和额外的校验位(校验码)。这些校验位的位置由数据位的位置决定,以一种特定的规则进行排列。通过这种方式,当数据传输时,接收方可以使用这些校验位来检测并纠正传输过程中可能发生的错误。
海明检验的基本原理:
生成海明码: 在发送数据之前,计算数据的海明码。海明码中的每个校验位都是根据特定规则与数据位相关联的。
传输数据: 将原始数据和生成的海明码一起传输。
接收数据: 接收方收到数据后,使用相同的海明码规则计算接收到的数据的海明码。
校验: 接收方比较接收到的校验位与计算出的校验位。如果它们不匹配,则表示数据在传输过程中发生了错误。
如果海明检验检测到错误,接收方可以尝试使用海明码中的校验位来确定错误的位置,并尝试纠正错误。这种方式可以有效地提高数据传输的可靠性,特别是在受到噪声干扰或传输信道不稳定的情况下。
增加冗余码(校验位)
(7,4)海明校验码中校验位和被校验信息位的排列如下:
海明码位号 Hj 1 2 3 4 5 6 7 8 9 10 11 P和b的分布 P1 P2 b1 P3 b2 b3 b4 P4 b5 b6 b7
由此可采用偶校验计算出P1~P4 四个校验位的值
为0则表明无错误,反之指出出错位的海明码位号。
如 = 1 0 1 1, 表明位出错! 当只有一位出错时,由于指错字能定位错误,故可利用指错字配合适当电路和异或门,修正出错位。