参考资料:《计算机组成原理》(秦磊华版)

目录

  • 1 数据表示应考虑的因素
  • 2 数值数据的表示
    • 2.1数的机器码表示
      • 2.1.1 原码表示
      • 2.1.2 反码表示
      • 2.1.3 补码表示
      • 2.1.4 移码表示
    • 2.2 数的定点表示
    • 2.3 浮点数据表示
      • 2.3.1 浮点数据表示的一般格式
      • 2.3.2 IEEE 浮点数据表示
      • 2.3.3 浮点数的规格化
      • 2.3.4 浮点数的表示范围和精度
  • 3 非数值数据的表示
    • 3.1 字符的表示方法
    • 3.2 汉字编码
      • 3.2.1 汉字输入码
        • 3.2.1.1 区位码
        • 3.2.1.2 拼音码
        • 3.2.1.3 字形编码
        • 3.2.1.4音形结合编码方法
      • 3.2.2 汉字机内码
      • 3.2.3 汉字字形码
  • 4 数据信息的校验
    • 4.1 码距与数据校验
  • 5 习题

计算机内部流动的信息可以分为两大类:一类为数据信息,另一类为控制信息。数据信息是计算机加工处理的对象,而控制信息则控制数据信息的加工处理。

1 数据表示应考虑的因素

数据表示的作用就是将数据按照某种方式组织,以便机器硬件能直接识别和引用。由于数字计算机中的信息都是由逻辑电路进行处理,因此,应用中的任何数据要能直接被计算机识别和引用,必须首先表示成二进制。

  1. 数据类型

    • 数值数据:又确定的值,表示数的大小,一般用于科学计算
    • 非数值数据:又称符号数据,没有值得含义,一般用来表示符号或文字
  2. 数据表示范围和精度:计算机所能表示数的范围和精确度与所采用的数据类型和字长有关
  3. 存储和处理的代价
  4. 软件的可移植性

2 数值数据的表示

2.1数的机器码表示

对于原码、反码和补码而言,数据的最高位(最左位)为 “0” 时,表示该数为正数;数据的最高位(最左位)为 “1” 时,表示该数为负数。对于移码,则正好相反,数据的最高位为 “0” 时,表示数为负数;数据的最高位为 “1” 时,表示该数为正数。为了区分一般书写时表示的数和机器中编码表示的数,我们称前者为真值,后者为机器数。

2.1.1 原码表示

原码表示法是一种直观的数据表示方法,除符号被数值化以外,数值部分仍保留着其真值的特征。

真值 原码
正小数 +0.abcde 0.abcde
负小数 -0.abcde 1.abcde
正整数 +abcde 0abcde
负整数 -abcde 1abcde

存在正 0 与负 0 之分:

  • +0:0.000
  • -0:1.000

优点:直观,在数的真值和它的原码表示之间的对应关系简单,相互转换容易。

缺点:加减运算复杂,两个数求和时,如果符号相同,则数值部分相加;如果符号相异,则数值部分相减。相减时,要先比较两个运算数绝对值的大小,然后做减法,最后结果的符号位与绝对值大的那个数的符号位相同。显然,利用原码实现加减法运算控制复杂,且不利于运算器设计的简化。

2.1.2 反码表示

反码表示法中,正数据的符号位为 0,数值部分与其真值相同,负数的符号为 1,数值部分通过对真值逐位取反得到。

真值 反码
正小数 +0.abcde 0.abcde
负小数 -0.abcde 1.a非b非c非d非e非
正整数 +abcde 0abcde
负整数 -abcde 1a非b非c非d非e非

存在正 0 与负 0 之分:

  • +0:0.000
  • -0:1.111

2.1.3 补码表示

正数的补码与原码一致。

利用反码求补码:求一个负数的补码,可以在其反码的基础上通过在最低位加 1 的方式得到。

利用扫描方法求补码:扫描方法可以很方便地将一个负数从真值或原码表示直接变换成补码,具体方法是对数值位按照从低位到高位的顺序(假设低位在数的尾部)扫描,尾数第一个 1 及其右边的 0 保持不变,其余各位求反,最后再将符号位置 1。

不存在正 0 与负 0 之分,它们的补码都为 0.000。

真值 补码
正小数 +0.abcde 0.abcde
负小数 -0.abcde 1.a非b非c非d非e非 + 0.00001
正整数 +abcde 0abcde
负整数 -abcde 1a非b非c非d非e非 + 1

2.1.4 移码表示

移码可通过真值 x 加上一个常数得到,这个常数也称为偏置值,增加常数的操作相当于 x 在数轴上向正方向平移了一段距离,这就是称为 “移码” 的原因,移码也可称为增码。即:

[x]移=x+偏移值[x]_移= x+偏移值 [x]移​=x+偏移值

移码通常用于表示浮点数的阶码,整数表示。最常见的移码偏置值为 2n(n 为整数中不包含符号位的整数位数)。

7 位整数 x 的移码形式为:

[x]移=27十x(一27≤x<27)[x]_移= 2^7十x~~~~(一2^7 ≤ x < 2^7) [x]移​=27十x    (一27≤x<27)

真值 移码
正整数 +abcde 1abcde
负整数 -abcde 0a非b非c非d非e非 + 1

移码的符号位中 “0” 表示负数,“1” 表示正数。

同一数值的移码和补码除符号位相反外,数值位相同。

移码中 0 的表示也唯一,具体表示为 10000。

将移码作为浮点数的阶码具有下列优点:

  • 移码通过偏移的方法把真值映射到正数域,这样可直接按无符号数规则比较两个移码表示数据的大小,便于浮点数的比较。
  • 有利于简化 “机器零” 的判断,当移码的各位均为 0 时,对应的阶码值最小,此时,当尾数为全 0,对应的就是机器零。

2.2 数的定点表示

定点表示法约定机器中所有数据的小数点位置固定,其中,将小数点的位置固定在数据的最高数位之前(或符号位之后)的数据表示称为定点小数,而将小数点固定在最低数位之后的数据表示称为定点整数。另外,由于小数点位置固定,因而小数点可不必再用记号表示,也无需存储。

  1. 定点小数:将小数点的位置固定在数据的最高数位之前(或符号位之后)的数据。
  2. 定点整数:将小数点固定在最低数位之后的数据表示称为定点整数。

定点数能表示的数据范围与下列因素有关:

  • 字长,一般而言,字长越长,表示的数据范围就越大。
  • 所采用的机器数表示方法,补码和移码数据表示所能表示的数据范围比原码和反码所能表示的数据范围要多一个数据单位。

2.3 浮点数据表示

浮点表示法是小数位置点在数据中不固定,即小数点在数中可以浮动的一种数据表示方法,它由阶码和尾数两部分组成,其中阶码的位数决定数据的范围,尾数的位数决定数据的精确度。

2.3.1 浮点数据表示的一般格式

对任意一个二进制数 N 都可表示成:
N=2E×MN = 2^E \times M N=2E×M
其中,E 为数 N 的阶码,M 称为数 N 的尾数。

其中,Es 表示阶码的符号,E~Em 为阶码的值,Ms 表示尾数的符号(也决定整个数的正负),M~Mn 构成尾数,尾数是小于 1 的数。

2.3.2 IEEE 浮点数据表示

在浮点数据表示中,不同机器可能选用不同基、不同的阶码及尾数的位数,从而导致不同机器浮点数据表示的差异性较大,不利于软件的移植。为此,美国电气及电子工程师协会 IEEE 于 1985 年提出了浮点数标准 IEEE 754,现在该浮点数标准已被主流计算机所采用。

32 位 IEEE 754 单精度浮点数格式:IEEE 754 浮点数据表示由符号位 S、阶码部分 E 和尾数部分 M 组成,具体形式如下:

其中 S 占 1 位,E 占 8 位,M 占 23 位。

  • 阶码字段 E:在 IEEE 754 标准中,阶码部分采用偏移值为 127 的移码表示。

  • 尾数字段 M:在 IEEE 754 标准中,约定小数点左边隐含一位 1,即尾数的实际有效位数为 24 位,完整的尾数形式为 1.M,但在进行浮点数据表示时只保存 M,正是由于要将尾数变成 1,阶码的偏移值才为 127 而不是 128。

与 IEEE 754 格式相对应的浮点数的真值可表示为:
N=(−1)S×2E−127×1.MN= (-1)^S \times 2^{E-127} \times 1.M N=(−1)S×2E−127×1.M
随着 E 和 M 的取值不同,IEEE 754 浮点数据表示具有不同的意义:

  • E = 0,M = 0:表示机器零。
  • E = 0,M ≠ 0:则 N=(−1)S×2E−126×0.MN= (-1)^S \times 2^{E-126} \times 0.MN=(−1)S×2E−126×0.M,表示一个非规格化的浮点数,非规格化的主要目的是为了提高数据的精确度。
  • 1 ≤ E ≤ 254:N=(−1)S×2E−127×1.MN= (-1)^S \times 2^{E-127} \times 1.MN=(−1)S×2E−127×1.M,表示一个规格化的浮点数。
  • E = 255,M = 0:表示一个无穷大的数,对应于 x / 0(其中 x ≠ 0)。
  • E = 255,M ≠ 0:N = NaN,即 N 是一个非数值,对应于0 / 0。

32 位 IEEE 754 浮点数与真值之间的变换流程如图:

2.3.3 浮点数的规格化

在浮点运算过程中,为了保证数据的精度,要求尾数的最高位为非 0 数码,即当尾数的值不为零时,其绝对值应大于或等于 (1/2)10,这是浮点数规格化的基本要求。因此,对于非规格化浮点数,可以通过将尾数左移或右移,并修改阶码的值以满足规格化要求。

以补码表示为例,正数规格化后,尾数的形式为:

0.1XX...X0.1XX...X 0.1XX...X

负数规格化后,尾数的形式为:

1.0XX...X1.0XX ... X 1.0XX...X

记号 “X” 可任取 0 或 1。

正数规格化后,尾数最大值为 0.111…1,尾数最小值为 0.100…0,即 (1/2) ≤ m < 1。

负数规格化后,尾数(补码表示)最大值为 1.011…1,尾数最小值为 1.000…0,即 -1 ≤ m < -(1/2)。

由于 -(1/2) 的补码形式为 1.100…0,为了方便机器判别,故约定不将 -(1/2) 列入规格化数。

虽然浮点表示能扩大数据的表示范围,但因为机器字长是有限的,所以它的表示范围仍然是有限的,如果在运算过程中,出现超出机器所能表示范围的数据,这种现象称为溢出。


上图给出了相应的补码规格化数的数值表示范围,图中 “可表示的负数区域” 和 “可表示的正数区域” 及 “0”,是机器可表示的数据区域;上溢区是数据绝对值太大,机器无法表示的区域;下溢区是数据绝对值太小,机器无法表示的区域。

如果运算结果落在上溢区,就产生了溢出错误,使得结果不能被正确表示,此时要停止机器运行,进行溢出处理。若运算结果落在下溢区,虽然也不能正确表示结果,但由于产生下溢的数的绝对值很小,因此常作 0 处理,并称为机器零。所谓机器零是指如果一个浮点数的尾数全为 0,则不论其阶码为何值,或者一个浮点数的阶码小于它能表示的最小负数,则不论其尾数为何值,计算机在处理它们时都把该浮点数作 0 处理。特别是当浮点数的阶码采用移码表示、尾数采用补码数据表示时,如果阶码等于它能表示的最小负数(即为 -2n 时,n 为阶码的位数)且尾数为 0 时,其阶码和尾数表现为全 0,从而有利于机器中判 0 电路的设计与简化。

一般来说,增加尾数的位数,将增加可表示区域数据点的密度,从而提高了数据的精度;增加阶码的位数,能增大可表示的数据区域,并缩小不能表示的数据区域,扩大了数据的表示范围。但是,在字长一定的情况下,增加数据表示范围将影响数据表示的精确度,反之亦然。

2.3.4 浮点数的表示范围和精度

数据的表示范围是指机器所能表示的一个数的最大值与最小值间的范围,数据的精度是指一个数的有效位数,有效位数越多,精度越高。

设计算机字长为 m + n 位(含相应的符号位),当采用一般浮点数格式表示时,m 和 n 分别表示阶码和尾数的位数(各包含一位符号位),且假设阶码和尾数均采用补码数据表示,能表示的数据范围如下:


从上图可看出,当机器字长一定时,分给阶码的位数越多,尾数占用的位数就越少,则数的表示范围越大。而尾数占用的位数减少,必然会减少数的有效数位,即影响数的精度。IEEE 754 单精度浮点格式所表示的非负数据特征如下所示:

3 非数值数据的表示

3.1 字符的表示方法

国际上广泛采用 ASCII 码(American StandardCode for Information Interchange)表示字符。它选用了常用的128 个符号,其中包括 33 个控制字符、10 个十进制数码、52 个英文大写和小写字母、33 个专用符号。128 个字符分别由 128 个二进制数码串表示。目前广泛采用键盘输入方式实现信息输入,当从键盘输入字符时,编码电路按字符键的要求给出与字符相应的二进制数码串,然后送交机器处理。计算机输出处理结果时,则把二进制数码串按同一标准转换成字符,由显示器显示或打印机打印出来。

128 个字符可以用 7 位二进制数对它们进行编码,即用 0000000~1111111 共 128 种不同的数码串分别表示 128 个字符,如果加上一个校验位,正好可用一个字节(8位)表示一个字符。

3.2 汉字编码

计算机要对汉字信息进行处理,首先要将汉字转换成计算机可以识别的二进制形式并输入到计算机,这是由汉字输入码完成的。汉字输入到计算机后,还需要转换成机内码才能被计算机处理,显然,汉字机内码也应该是二进制形式。如果需要显示和打印汉字,还要将汉字的机内码转换成汉字字形码

3.2.1 汉字输入码

用通用的西文键盘输入汉字,首先必须解决汉字的输入问题,汉字输入编码的研究是一个十分活跃的领域,到目前为止,国内外提出的编码方法有几百种之多,但编码的方式不外乎以下4大类:

  • 流水码:用数字组成的等长编码,如国标码、区位码。

  • 音码:根据汉字读音组成的编码,如拼音码。

  • 形码:根据汉字的形状、结构特征组成的编码,如五笔字型码。

  • 音形码:将汉字的读音与其结构特征综合考虑的编码,如自然码、钱码等。

3.2.1.1 区位码

区位码将汉字字符编成行列结构的二维矩阵,其中的行又称为区,列又成为位,区位码由此得名。区和位均用两位十进制数表示,因此,对应于一个汉字的区位码由 4 位十进制数构成,其中前两位对应区,后两位对应位。区位码将汉字编码 GB2312-80 中的 6763 个汉字分成 94 个区和 94 个位。区位码具有如下特点:

  1. 无重码。
  2. 等长,所有汉字的区位码都是 4 位。
  3. 由于汉字的区位与汉字之间的对应关系没有什么规律,记忆困难。
  4. 除输入汉字外,还能输入各种图形字符和制表符等。
3.2.1.2 拼音码

直接用汉字的拼音作为汉字编码,即每个汉字的拼音本身就是其输入码,这种编码具有如下特点:

  1. 具有重码,输入汉字拼音后还需要翻屏选择具体的汉字。
  2. 编码长度较长且可变。
  3. 容易使用,不需要任何其他记忆,只要会拼音,就能输入汉字。
  4. 只能输入汉字。
3.2.1.3 字形编码

这是一种根据汉字的形状、结构特征组成的编码,主要方法是将汉字拆分成若干个基本成分,用这些基本部分组成汉字的编码。由于拆分汉字的角度、方法不同,因而产生出各种各样的形码。其中五笔字型码是最为流行和普及的字形编码。该码特点是:重码少,输入速度快,但需要有一定的记忆。

3.2.1.4音形结合编码方法

音形码是既要考虑汉字的读音,又要考虑汉字的结构特征的一类输入码,它们通常由两部分组成,即反映汉字读音的编码和表现汉字本身结构特征的字根编码。音形码的种类很多。有首尾码、快速码、音形码、形声码、表形码、钱码、自然码等,其中自然码、钱码尤为突出。音形码的特点是选用的字根少,记忆量小。

3.2.2 汉字机内码

汉字机内码是计算机内存储和处理汉字时使用的编码。由于计算机要同时处理汉字和字符,因此,对汉字机内码编码时,既要考虑到与 ASCII 码严格区分,又要能与国标码或区位码之间具有简单的对应关系。汉字机内码与区位码之间的对应关系为:区位码 + A0A0H。由于文本中通常混合使用汉字和西文字符,汉字信息如果不与西文字符进行区别,就会与单字节的 ASCII 码混淆。此问题的解决方法之一是将一个汉字看成是两个扩展 ASCII 码,使表示 GB2312 汉字的两个字节的最高位都为 1,这样就能区别一个机内码到底对应一个汉字还是两个西文字符。

3.2.3 汉字字形码

字形码是汉字的输出码,输出汉字时都采用图形方式,无论汉字的笔画多少,每个汉字都可以写在同样大小的方块中。为了能准确地表达汉字的字形,对于每一个汉字都有相应的字形码。

目前大多数汉字系统中都是以点阵的方式来存储和输出汉字的字形。所谓点阵就是将字符(包括汉字图形)看成一个矩形框内一些横竖排列的点的集合,有笔画的位置用黑点表示,没笔画的位置用白点表示。在计算机中用一组二进制数表示点阵,用 0 表示白点,用 1 表示黑点。

一般的汉字系统中汉字字形点阵有 16X16,24X24,48X48 几种,点阵越大对每个汉字的修饰作用就越强,打印质量也就越高。通常用 16X16 点阵来显示汉字,每一行上的 16 个点需用两个字节表示,一个 16X16 点阵的汉字字形码需要 2X16=32 个字节表示,这 32 个字节中的信息是汉字的数字化信息,即汉字字模。汉字字模按国标码的顺序排列,以二进制文件形式存放在存储器中,构成汉字字模字库,也称为汉字字形库,简称汉字库。

4 数据信息的校验

4.1 码距与数据校验

通常将一组编码中任何两个编码之间不同代码的位数称为这两个编码的距离,简称码距,又称海明(Hamming)距离。对于一个编码体制,将其中所有的合法码距的最小值称为这个编码体制的码距。

码距是编码体制里一个重要概念,通过增加码距就能把一个不具备检错的编码变成具有检错功能的编码。校验码就是利用这一原理,在正常编码的基础上,通过增加一些附加的校验位而形成的。增加校验的同时也增加了码距,当码距增加到一定程度时,校验码不仅具有检错功能,而且还可具有纠正错误的能力。

根据信息论原理,码距 d 与校验码的检错和纠错能力的关系如下:

  1. d ≥ e + 1:可检测 e 个错误。
  2. d ≥ 2t + 1:可纠正 t 个错误。
  3. d ≥ e + t + 1:当 e ≥ t 时,可检测 e 个错误并纠正 t 个错误。

5 习题

习题 1 写出下列各数的原码、反码和补码:

真值 原码 反码 补码
0 0.000 或 1.000 0.000 或 1.111 0.000
-0 1.000 1.111 0.000
0.10101 0.10101 0.10101 0.10101
-0.10101 1.10101 1.01010 1.01011
0.11111 0.11111 0.11111 0.11111
-0.11111 1.11111 1.00000 1.00001
-0.10000 1.10000 1.01111 1.10000
0.10000 0.10000 0.10000 0.10000

习题 2 求与 IEEE 754 32 位浮点数 43940000H 对应的十进制数:

解:先将 IEEE 754 32 位浮点数 43940000H 化为二进制形式:
010000111001010000000000000000000~~100 0011 1~~001 0100 0000 0000 0000 0000 0  10000111  00101000000000000000000

则可知,数符 S = 0,阶码 E = 10000111,E - 127 = 00001000 = 8,尾数 M = 00101000000000000000000,1.M = 1.00101,

故对应的十进制数:
N=(−1)0×28×(1.00101)2=(100101000)2=296N = (-1)^0 \times 2^8 \times (1.00101)_2 = (100101000)_2 = 296 N=(−1)0×28×(1.00101)2​=(100101000)2​=296

计算机组成原理学习之路(一)——数据表示相关推荐

  1. 计算机组成原理学习笔记(上)

    计算机系统概论 计算机发展历程 原始计算工具 中国人的智慧之光 机械式计算机 西方人的智慧 机电式计算机 电子计算机 1,最古老的计算工具:算筹 2,冈特计算尺 3,达芬奇机械式计算机 4,1642年 ...

  2. 评价微型计算机总线的性能指标,计算机组成原理学习笔记(3):总线

    文章目录 课程笔记导览 附录:英语解释 第三章 总线 3.1 总线的基本概念 使用总线的原因: 总线的定义 总线上信息的传送 总线结构举例 单总线结构 面向CPU的双总线结构 以存储器为中心的双总线结 ...

  3. 计算机组成mod2是什么意思,计算机组成原理 第2讲_数据表示.ppt

    计算机组成原理 第2讲_数据表示 青岛理工大学计算机学院 Computer Organization 青岛理工大学 * * 计算机组成原理 Principles of Computer Organiz ...

  4. 计算机组成原理学习笔记一

    计算机组成原理学习笔记一 计算机发展历程 一.计算机硬件发展 (1)计算机的四代变化 (2)计算机元件更新换代 二.计算机软件发展 三.计算机的分类 计算机系统层次结构 一.计算机系统的组成 二.计算 ...

  5. 计算机组成原理学习1

    计算机组成原理学习 题目 1.CPU执行这个程序时,获得的平均CPI = ______ 2.CPU执行这个程序时,其获得的IPS指标= _______ MIPS 3.CPU执行这个程序时,消耗的总时间 ...

  6. 计算机原理学习指导第3版,计算机组成原理学习指导与习题解析(第3版)(21世纪大学本科计算机...

    摘要: 这本<计算机组成原理学习指导与习题解析(第3版)>由蒋本珊编著,是与"十二五"普通高等教育本科国家级规划教材<计算机组成原理(第3版)>完全配套的学 ...

  7. 怎么学计算机组成原理,计算机组成原理学习(一)

    前言 本次计算机组成原理学习主要分为两块 1.计算机组成原理学习(一) 主要对计算计结构和微处理器(CPU)功能原理进行学习 2.计算机组成原理学习(二) 主要对CPU,操作系统,汇编.编程语言之间的 ...

  8. 408计算机组成原理学习:计算机的基础

    408计算机组成原理学习:计算机的基础 计算机系统 = 硬件 + 软件 硬件:计算机的实体,如主机.外设等 软件:由具有各类特殊功能的程序组成 计算机性能的好坏取决于"软".&qu ...

  9. 计算机组成原理学习笔记第1章 1.3——实验一 计算机性能测试

    计算机组成原理学习笔记第1章 1.3--实验一 计算机性能测试 本篇笔记整理:Code_流苏(CSDN) 目录 计算机组成原理学习笔记第1章 1.3--实验一 计算机性能测试 0️⃣思维导图(自制) ...

最新文章

  1. 修改新版am335x支持1G主频的方法[来自A Xian调试记录]
  2. _INTSIZEOF(n)解析
  3. 八大排序算法的 Python 实现
  4. 【深度学习】面向医学图像的病灶分割调研(二)
  5. oracle awr 等待事件,3.db file scattered read等待事件
  6. Gridview 手动排序实现
  7. 如何升级docker的版本 ?
  8. mysql u0019_mysql服务无法启动
  9. 201521123009 《Java程序设计》第1周学习总结
  10. redis 介绍与安装
  11. 现代语音信号处理之语谱图(spectrogram)
  12. 广电linux机顶盒装软件,电视盒子如何安装第三方软件(四种参考方法)
  13. win10进程太多怎么优化_Windows 10加速优化全攻略,何止是快?
  14. Task07: 凸优化;梯度下降;优化算法进阶 学习笔记
  15. Oracle 月初、月末等时间获取示例
  16. Good Luck in CET-4 Everybody!(sg函数模板)
  17. [MATLAB]河道水流量的估算问题
  18. 数据结构——图的邻接表实现
  19. Mongodb 查询重复数据
  20. 青春岁月杂志青春岁月杂志社青春岁月编辑部2022年第11期目录

热门文章

  1. 数据埋点几种方式介绍
  2. oc总结第四讲:属性
  3. DOS中del和rd的区别
  4. 大学计算机课代表竞选稿,音乐课代表竞选稿
  5. JAVA-超大文件上传-如何上传文件-大文件上传
  6. 支付项目:5、通用型支付系统(1)
  7. 大数据(一)数据采集 3
  8. Centos7 查看系统版本信息
  9. ~6. ccf 2021-09-1 数组推导
  10. wpf toolbar右对齐_侧方停车是与旁车对齐还是反光镜对B柱?有什么停车技巧吗