计算机组成原理--数据表示

目录

1、机器数及特点

1.1 机器内的数据表示

1.1.1.原码

1.1.2. 反码

1.1.3. 补码

1.2 常见机器数的特点

2、定点数与浮点数据表示

2.1 定点数据表示

2.2 浮点数据表示

2.3 补充:小数的二进制表示

3、数据校验的基本原理

3.1 必要性:

3.2 基本原理

3.2.1 码距:

3.2.2 码距与检错或纠错能力的关系

3.2.3 选择码距要考虑的因素

4、奇偶校验

4.1 基本原理

4.2 特点

4.3 改进的奇/偶校验

5、CRC校验及实现

5.1 基本原理

5.2 模2运算规则

5.3 CRC的编码方法

5.4 CRC的检错与纠错

6、海明校验及实现

6.1 基本原理

6.2 举例


1、机器数及特点

目的:组织数据,方便计算机硬件直接使用

因素:

  • 支持的数据类型;
  • 能表示的数据范围;
  • 能表示的数据精度;
  • 存储和处理的代价;
  • 是否有利于软件的移植等……

1.1 机器内的数据表示

真值: 符号用“ + ”、“ - ”表示的数据表示方法。

机器数: 符号数值化的数据表示方法,用0、 1表示符号。

三种常见的机器数: 设定点数的形式为X0,X1 X2 X3... Xn

1.1.1.原码

原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值。比如:如果是8位二进制:

[+1]原= 0000 0001

[-1]原= 1000 0001

第一位是符号位,因为第一位是符号位,所以8位二进制数的取值范围就是:(即第一位不表示值,只表示正负。)

[1111 1111 , 0111 1111]

[-127 , 127]

原码是人脑最容易理解和计算的表示方式。

1.1.2. 反码

反码的表示方法是:

正数的反码是其本身;

负数的反码是在其原码的基础上,符号位不变,其余各个位取反。

[+1] = [0000 0001]原= [0000 0001]反

[-1] = [1000 0001]原= [1111 1110]反

可见如果一个反码表示的是负数,人脑无法直观的看出来它的数值。通常要将其转换成原码再计算。

1.1.3. 补码

补码的表示方法是:

正数的补码就是其本身;

负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+1。(也即在反码的基础上+1)

[+1] = [0000 0001]原= [0000 0001]反= [0000 0001]补

[-1] = [1000 0001]原= [1111 1110]反= [1111 1111]补

对于负数,补码表示方式也是人脑无法直观看出其数值的。通常也需要转换成原码再计算其数值。

1.2 常见机器数的特点

原码:

  • 表示简单:[X]原 = 2^n - X
  • 运算复杂 运算位不参加运算,要设置加法、减法
  • 0的表示不唯一

反码:

  • 表示相对原码复杂 [X]反 = 2^(n+1) + X - 1
  • 运算相对简单:符号位参加运算,只需设置加法器,但符号位的进位为需要加到最低位
  • 0 的表示不唯一

补码:

  • 表示相对原码复杂: [X]补=2^(n+1)+X
  • 运算简单:只需设置加法器。
  • 0的表示唯一
  • 补码中模的概念( 符号位进位后所在位的权值)

移码:

  • 移码表示浮点数的阶码, IEEE754中阶码用移码表示。
  • 设定点整数X的移码形式为XoX1Xx2X...Xn则移码的定义是:

[X]移 = 2"+ X -2^n

具体实现:不管正负数,只要将其补码的符号位取反即可

2、定点数与浮点数据表示

2.1 定点数据表示

  • . 可表示定点小数和整数
  • .表现形式:

计算机组成原理--数据表示_第1张图片

  • 定点小数表示数的范围(补码为例): -1<= x <= 1-2^(-n)
  • 定点整数表示数的范围(补码为例):-2^n <= x <= 2^n - 1
  • 定点数据表示数的不足:数据表示范围受限

2.2 浮点数据表示

把数的范围和精度分别表示的一种数据表示方法。

浮点数的使用场合

当数的表示范围超出了定点数能表示的范围时。

(1)格式(一般格式)

  • E:阶码位数决定数据的范围
  • M:尾数位数,决定数的精度

不足:不同系统可能根据自己的浮点数格式从中提取不同位数的阶码

(2)IEEE 754格式

计算机组成原理--数据表示_第2张图片

  • 指数采用偏移值,其中单精度偏移值为127 ,双精度为1023,将浮点数的阶码值变成非负整数,便于浮点数的比较和排序。
  • IEEE754尾数形式为1.XXXXX,其中M部分保存的是XXXXXX(1被隐藏) ,从而可保留更多的有效位,提高数据表示的精确度。

与上述IEEE754格式相对应的32位浮点数的真值可表示为:

N = (-1)^5 x 2(E - 127) x 1.M

随E和M的取值不同,IEEE754浮点数据表示具有不同的意义

计算机组成原理--数据表示_第3张图片

计算机组成原理--数据表示_第4张图片

例:将十进制数 -12.75转换成32位IEEE754格式浮点数的二进制格式。

求解思路:

  • 步骤1: 确定符号位 、
    • 由于数值为负数,符号位为1。
  • 步骤2: 将数值部分转换为二进制
    • 将绝对值 12.75 转换为二进制:1100.11
  • 步骤3: 规格化
    • 移动小数点使得只剩一个非零位,得到规格化的尾数部分为 1.10011。
  • 步骤4: 计算指数
    • 计算指数值,偏移量为 127。移动小数点的次数为 3,所以指数值为 3 + 127 = 130。将130转换为二进制为 10000010。
  • 步骤5: 组合符号位、
    • 指数部分和尾数部分 符号位:1 (1位)
    • 指数部分:10000010(偏移量为127) (8位)
    • 尾数部分:10011 (23位,不够补0)

将它们组合起来,得到IEEE 754表示的单精度浮点数为:11000001010011000000000000000000

2.3 补充:小数的二进制表示

0.75为例:

0.75 x 2 = 1.5 …… 1

0.5 x 2 = 1.0 …… 1

直到小数部分为0.

所以(0.75)10 = (0.11)2

同理,计算二进制数 0.11 的进制数:

1 * 2^(-1) + 1 * 2(-2) = 0.75

小数第一位从2^(-1)次方开始,依次类推。

3、数据校验的基本原理

3.1 必要性:

  • 受元器件的质量、电路故障或噪音干扰等因素的影响,数据在被处理、传输、 存储的过程中可能出现错误;
  • 若能设计硬件层面的错误检测机制,可以减少基于软件检错的代价(系统观)。

3.2 基本原理

3.2.1 码距:

  • 同一编码中,任意两个合法编码之间不同二进数位数的最小值;
  • 0011与0001的码距为1,一位错误时无法识别;
  • 0000、0011、 0101、 0110、 1001、1010、 1100、 1111等编码码距为2。任何一位发生改变,如0000变成1000就从有效编码变成了无效编码,容易检测到这种错误。
  • 校验码中增加冗余码的目的就是为了增大码距

3.2.2 码距与检错或纠错能力的关系

计算机组成原理--数据表示_第5张图片

  • 码距>= e+1:
    • 可检测e个错误
  • 码距>=2t+1
    • 可纠正t个错误
  • 码距>=e+t+1
    • 可纠正t个错误,同时检测e个错误(e >= t)

3.2.3 选择码距要考虑的因素

  • 增加冗余码(校验位)

  • 码距越大,抗干扰能力越强,纠错能力越强,数据冗余越大编码效率低,编码电路也相对复杂;
  • 选择码距必须考虑信息发生差错的概率和系统能容许的最小差错率。

4、奇偶校验

4.1 基本原理

  • 增加冗余码(校验位)

  • 编码: 根据有效信息计算校验信息位,使校验码(数据 + 1位校验信息)中1的个数满足奇/偶校验的要求
    • 0001 -> 00011 (偶校验)

    • 0001 -> 00010 (奇校验)

  • 检错方法与电路

奇校验检错码:(1的个数为奇数个)

    • G = 0表示数据正常,否则表示出错
    • 计算机组成原理--数据表示_第6张图片

偶校验检错码:(1的个数为偶数个)

计算机组成原理--数据表示_第7张图片

    • G = 0 表示数据正常,否则表示出错
    • 计算机组成原理--数据表示_第8张图片

4.2 特点

  • 编码与检错简单
  • 编码效率高
  • 不能检错偶数位错误,无措结论不可靠,是一种错误检测码
  • 不能定位错误,因此不具备纠错能力

计算机组成原理--数据表示_第9张图片

4.3 改进的奇/偶校验

双向奇偶校验

方块校验

垂直水平校验

计算机组成原理--数据表示_第10张图片

计算机组成原理--数据表示_第11张图片

  • 可纠正1位错误
  • 可检测出某行(列)上的奇数位
  • 可检测出一部分偶数位错误
  • 不能检测出错码分布在矩形4个顶点上的错误

5、CRC校验及实现

5.1 基本原理

  • 增加冗余位

  • 生成多项式G(X)
    • 收发双方约定的一个(r+ 1)位二进制数,发送方利用G(X)对信息多项式做模2除运算,生成校验码。接收方利用G(X)对收到的编码多项式做模2除运算检测差错及错误定位。
  • G(x)应满足的条件
    • A、最高位和最低位必须为1 ;
    • B、当被传送信息( CRC码)任何一位发生错误时,被生成多项式做除后应该使余数不为0 ;
    • C、不同位发生错误时,模2除运算后余数不同;
    • D、对不为0余数继续进行模2除运算应使余数循环。、
  • 常见生成多项式

计算机组成原理--数据表示_第12张图片

5.2 模2运算规则

a) 加/减运算(异或运算,加不进位,减不借位)

0+0=0,0+1=1, 1+0=1,1+1 =0

b) 模2除法

按模2减,求部分余数,不借位。

c) 上商原则

①部分余数首位为1时,商为1 ,减除数;

②部分余数首位为0时,商为0 ,减0

③当部分余数的位数小于除数的位数时,该余数即为最后余数。

计算机组成原理--数据表示_第13张图片

5.3 CRC的编码方法

(1) 根据待校验信息的长度k,按照k+r≤2^r- 1确定校验位r的位数

如对4位信息1100进行CRC编码,根据4+r≤2^r- 1

得 rmin= 3

(2) 根据r和生成多项式的选择原则,选择位数为r +1的生成多项式G(X)= 1011

(3) 进行下列变化

即: 将待校验的二进制信息Q(X)逻辑左移r位得到Q(X)'

(4)对Q(X)'按模2运算法则除G(x) ,求CRC编码中的r位校验信息

计算机组成原理--数据表示_第14张图片

(5)用得到的余数替换Q(X)' 的最后r位即可得到对应的CRC编码

接收方利用G(X)对收到的编码多项式做模2除运算

计算机组成原理--数据表示_第15张图片

余数为0,表示没出错

计算机组成原理--数据表示_第16张图片

余数不为0,说明出错

5.4 CRC的检错与纠错

编码不同数位出错对应的余数

计算机组成原理--数据表示_第17张图片

  • 利用出错情况下余数的循环特性进行纠错
    • 若余数不为0 ,一边对余数补0继续做模2除,同时让被检测的校验码循环左移,当余数为101时出错位也移到A1位置。通过异运算纠正后继续循环左移和执行余数模2除法,直到修改后的出错位回原位。不需对每一位提供纠正电路。
    • 当位数增多时,循环码校验能有效地降低硬件代价,这是它得以广泛应用的主要原因

例题

1 假定要传输的数据长度为10位,对每个数据块进行CRC校验,根据CRC校验规则,要能检测并纠正一位错误,对应的CRC码的总位数为( D )(单选)

  • A.4
  • B.10
  • C.13
  • D.14

2 假定要传输的数据长度为10位,对每个数据块进行CRC校验,根据CRC校验规则,要能检测并纠正一位错误,对应的CRC码的总位数为( C )(单选)

  • A.4
  • B.10
  • C.13
  • D.14

3 设计待校验的信息为8位,假定传输中最多只发生一位错误,采用CRC校验时,生成多项式的二进制位数至少需要 (C) (单选)

  • A.4
  • B.10
  • C.13
  • D.14

4 设待校验的信息长度为 K 位, 生成多项式为G(X),下列关于CRC校验的描述中正确的是( BD ) (多选)

  • A.只有一位出错时,接收端进行校验得到的余数只与出错位的位置有关,与K位信息的取值和G(X)的取值无关
  • B.只有一位出错时,接收端进行校验得到的余数与出错位位置和G(X)的取值有关,与K位信息的取值无关
  • C.只有一位出错时,接收端进行校验得到的余数与出错位位置、G(X)及K位信息的取值都有关
  • D.CRC校验得到的无错结论不一定是正确的

6、海明校验及实现

6.1 基本原理

  • 增加冗余位(校验位)

1) 设k + r位海明码从左到右依次为第1 , 2 , 3 , ....,k+r位 1 r位校验位记Pi(i=1,2,, ..,r) ,分别位于k +r位海明编码的第2^(i-1) (i=1, 2, ..r)位上,其余位依次放置被校验的数据位;

2)(7 , 4)海明校验码中校验位和被校验信息位的排列如下:

计算机组成原理--数据表示_第18张图片

3)Hj位的数据被编号小于j的若干个海明位号之和等于j的校验位所校验,如:

由此可采用偶校验计算出P1 -- P4四个校验位的值!

4)设置指错字G4G3G2G1

G4G3G2G1为0则表明无错误,反之指出出错位的海明码位号。

6.2 举例

设被传送的信息b1b2b3b4b5b6b7 = 101 1000,采用偶校验;

则:

P1=b1⊕b2⊕b4⊕b5⊕b7=1⊕0⊕1⊕0⊕0=0

P2=b1⊕b3⊕b4⊕b6⊕b7=1⊕1⊕1⊕0⊕0=1

P3=b2⊕b3⊕b4=0⊕1⊕1=0

P4=b5⊕b6⊕b7=0⊕0⊕0=0

得到的海明编码为H = 01 1001 1 000 0

  • 当传输无措时,即 H = 01 1001 1 000 0
  • 则:
    • G4=P4 ⊕ b5 ⊕ b6 ⊕ b7=0 ⊕ 0 ⊕ 0 ⊕ 0= 0
    • G3=P3 ⊕ b2 ⊕ b3 ⊕ b4=0 ⊕ 0 ⊕ 1 ⊕ 1=0
    • G2=P2 ⊕ b1 ⊕ b3 ⊕ b4 ⊕ b6 ⊕ b7= 1 ⊕ 1 ⊕ 1 ⊕ 1 ⊕ 0 ⊕ 0=0
    • G1=P1 ⊕ b1 ⊕ b2 ⊕ b4 ⊕ b5 ⊕ b7= 0 ⊕ 1 ⊕ 0 ⊕ 1 ⊕ 0 ⊕ 0 =0

    • G4G3G2G1=0000,表明无错 !

  • 当传输出措时,即 H = 01 1001 1 000 1
  • 则:
    • G4=P4 ⊕ b5 ⊕ b6 ⊕ b7=0 ⊕ 0 ⊕ 0 ⊕ 1= 1
    • G3=P3 ⊕ b2 ⊕ b3 ⊕ b4=0 ⊕ 0 ⊕ 0 ⊕ 1= 0
    • G2=P2 ⊕ b1 ⊕ b3 ⊕ b4 ⊕ b6 ⊕ b7= 1 ⊕ 1 ⊕ 1 ⊕ 1 ⊕ 0 ⊕ 1= 1
    • G1=P1 ⊕ b1 ⊕ b2 ⊕ b4 ⊕ b5 ⊕ b7= 0 ⊕ 1 ⊕ 0 ⊕ 1 ⊕ 0 ⊕ 1= 1
    • G4G3G2G1= 1011 表明H11位出错!
  • 当只有一-位出错时,由于指错字G,G3G2G1能定位错误,故可利用指错字配合适当电路和异或门,修正出错位!

特点:

  • 1)G4G3G2G1 = 0000,不一定无措!
    • 如P1、b1、P2三位同时出错,则G2和G1依然为0
  • 2)一位错和两位错不能由指错字区别
    • 如b1、b2同时出错,与仅b3出错时的指错字均为G,G3G,G =0110。

你可能感兴趣的:(计算机组成原理,程序人生,汇编,开发语言)