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


    目录

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

    2.2 浮点数据表示

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

    浮点数的使用场合

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

    (1)格式(一般格式)

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

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

    (2)IEEE 754格式

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

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

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

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

    例:将十进制数 -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 码距与检错或纠错能力的关系

    • 码距>= 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表示数据正常,否则表示出错

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

      • G = 0 表示数据正常,否则表示出错

    4.2 特点

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

    4.3 改进的奇/偶校验

    双向奇偶校验

    方块校验

    垂直水平校验

    • 可纠正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除运算应使余数循环。、
    • 常见生成多项式

    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

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

    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位校验信息

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

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

    余数为0,表示没出错

    余数不为0,说明出错

    5.4 CRC的检错与纠错

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

    • 利用出错情况下余数的循环特性进行纠错
      • 若余数不为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)海明校验码中校验位和被校验信息位的排列如下:

    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。

  • 相关阅读:
    【鸿蒙(HarmonyOS)】UI开发的两种范式:ArkTS、JS(以登录界面开发为例进行对比)
    Leetcode 1619. 删除某些元素后的数组均值
    系统架构师备考倒计时20天(每日知识点)
    使用MySQL进行图像数据存储与处理的实践经验
    项目架构:husky + lint-staged + eslint - git提交前自动检查代码
    2023-09-20 Android CheckBox 让文字显示在选择框的左边
    基于SSM+SpringBoot+VUE前后端分离的停车场管理系统
    普通人做自媒体视频剪辑有出路吗?
    数值分析在线考试系统(asp.net+SqlServer)
    【SpringCloud微服务全家桶学习笔记-服务注册zookeeper/consul】
  • 原文地址:https://blog.csdn.net/qq_62254095/article/details/132841734