计算机组成原理02:机器数表示和校验

本文介绍了计算机中的机器数分类(定点数与浮点数)、表示方式(原码、反码、补码、移码),并详细讲解了奇偶校验、CRC校验和海明校验在数据传输中的作用。这些校验方法有助于减少数据错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本章学习计算机中如何表示基本数据。

目录

机器数分类及其表达方式

定点数

浮点数

机器数的校验

奇偶校验

CRC校验

海明校验

总结:

机器数分类及其表达方式

机器数分为定点数和浮点数。对于机器数,由于使用一串二进制位来表示数据,因此转化方式就决定了不同机器数的特点。机器数的三个主要特点如下:

  • 支持数据类型
  • 支持数据大小
  • 支持数据精度

下面看看定点数和浮点数的区别。

定点数

定点数据一般用于表示整数和定点小数。很明显的,定点数据的支持数据大小和其位数有关。比如高级语言中的32位int数据,可以表示-2^31+1~2^31的数据,而long long 数据则是64位的,表达范围增大。

定点数据有四种表示方式:原码、反码、补码和移码。

  1. 原码:最简单的表示方式,使用最高位做符号位,剩余位表示该数大小。虽然表示简单,但是运算相对复杂,而且0的表示不唯一(取8位原码为例,10000000和00000000都可以表示0,一个是+0,一个是-0.)
  2. 反码:表示复杂,使用最高位做符号位,当最高位为1时,剩余位为对应原码取反。这样运算相对简单一些,但是0的表示方式依然存在+0和-0两种(11111111和00000000)。
  3. 补码:表示复杂,使用最高位做符号位,当最高位为0时和原码相同,为1时剩余位为对应反码+1.这个+1非常重要,因为他简化了计算,这样补码数据就可以直接相加,运算比较简单。(参见下一章“运算方法和运算器”内容)
  4. 移码:通常用于表示表示浮点数的阶码。同一个数的移码和补码的符号位相反,剩余位相同,
浮点数

浮点数一般用于表示小数位数不确定的小数。当表示一个浮点数时,整个数据分为三部分:符号位S,阶码部分E和尾数M。其中,符号位S表示该数的正负,阶码E表示这个数的大小,尾数M表示这个数的精度。对于32位单精度浮点数来说,一般E有8位而M有23位,而对于64位双精度浮点数来说,E有11位而M有52位。总的来说,假设浮点数为N,那么其可以用以下公式表示:

N = (-1)^S \times 2^{E-127} \times 1.M         (单精度)

N = (-1)^S \times 2^{E-1024} \times 1.M        (双精度)

其中,对于E和M的特殊情况,做出如下规定:

  1. 当E=0,M=0时,表示机器0.
  2. 当E=0,M≠0时,表示非规格浮点数(需要进行规格化)
  3. 当1≤E≤254时,表示规格浮点数
  4. 当E=255,M=0时,表示无穷大Inf
  5. 当E=255,M≠0时,表示非数值结果NaN

例如:将20.59375转化为32位IEEE754格式的浮点数。

20.59375 = 10100.10011 = 1.010010011 * 2^4

那么可以得到:
S=0
E=10000011
M=01001001100...0
S+E+M既可以得到IEEE754格式的浮点数:
结果化成16进制为:
41A4C000H

机器数的校验

奇偶校验

奇偶校验又分为奇校验和偶校验。其中,偶校验在传输数据中1的数据为偶数时校验位为1,否则为0;奇校验则相反。

奇偶校验有着以下两个特点

  • 编码与检错简单
  • 编码效率高

但是奇偶校验也有两个非常严重的问题:

  • 不能检测偶数位的错误。
  • 不能定位错误。
  • 改进奇偶校验不能检出顶点位的错误。

下面的例子说明了奇偶校验的特性。红色的是发生错误的编码,但是改进奇偶校验不能检出是在哪一行,只能检出是在哪一列。

奇校验行校验位
01101001
10110100
00101101
11101011
10010110
10001101
列校验位1000110

奇偶校验主要应用于传输过程中。当使用同步传输时,一般采用奇校验;当使用异步传输时,一般使用偶校验。

CRC校验

假设要校验的信息有k位,而被校验的信息有r位。那么,CRC中的k和r满足下列公式:

k+r \leqslant 2^r-1

所以,CRC校验的第一步是确定r的位数。

第二步:确定生成多项式G(x):生成多项式必须满足如下需求:

  1. 至少有(r+1)位
  2. 最高位和最低位均为1
  3. 任一位发生错误时,被生成多项式做除后余数不为0
  4. 不同位发生错误时,模2的余数不同。

第三步:确定r的具体数值。

现在k位编码逻辑左移r位,使用上商方法除以生成多项式,得到的余数就是r的具体数值。

现在,将k位编码和r位校验码组成新串进行校验,如果编码没有错误,得到的余数应该是0.

第四步:检错

假设出现了错误,生成多项式相除会留下余数,可以对照生成多项式余数对应的错误位来寻找。

CRC校验的硬件实现方式是循环使用异或运算来实现的(当最高位为1时如上)。

海明校验

海明校验相比CRC校验更加的通俗易懂。海明校验校验位数r和待检验串的位数k满足和CRC校验相同的公式。但是这r个校验位的位置不同:这r个校验位分别分布在第2^(i-1) (i=1,2,...,r)上。

假设待校验数据有7位,那么对应海明校验码为4位,他们分布的位置如下:

1        2        3        4        5        6        7        8        9        10        11

第j位的数据被若干个海明位号之和为j的校验位所确定。那么,如何确定海明校验位的数值呢?

海明校验位的数值为对所有其所校验的待检验数据的偶校验确定。

另外设置指错字Gi,来判断哪一位校验位出现了问题。Gi为校验位和其所有校验的原数据位的异或,当Gi为1时,说明校验位出现问题。通过校验位可以指示到底是哪一位出错。

总而言之,海明校验的步骤如下:

  1. 求出r
  2. 偶校验求出各位校验位数值
  3. 校验时,求出对应指错字数值
  4. 根据指错字判断是否出错以及出错位置。

下面给出一个例子:

假设原来的数据为: 1011000
那么可以求出对应的海明校验位
p1 = b1^b2^b4^b5^b7 = 0
p2 = b1^b3^b4^b6^b7 = 1
p3 = b2^b3^b4 = 0
p4 = b5^b6Bb7 = 0
那么得到的编码为
01100110000

现在假设b3在传输中出错了,数据变为:
01100010000

那么指示它的校验位p2,p3都会出错,即对应的指错字
G2=1,G3=1
那么有
(G1G2G3G4)=0110 = 6
也就是第六位出错。即b3出错。

海明校验的缺点:

  • 海明校验依然只能指出一位的出错。当多位出错时,海明校验无法精确指出。
  • 配合使用奇偶校验,海明校验可以分辨一位和两位错误,但是无法分辨1位和3位错误。

总结:

本章学习了机器数分类和表达方式,以及确认数据传输过程中没有错误的三种校验方法。这些表示方式方法是后期机器数计算的基础。而校验则可以减少数据传输错误所带来的不良影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值