计算机内部流动的信息可以分为两大类:一类是数据信息,另一类为控制信息。
数据信息是计算机加工处理的对象,而控制信息则控制数据信息的加工处理。
2.1 数据表示应考虑的因素
-
1.数据类型 从大体上分类:数值数据和非数值数据。
-
2.数据表示范围和精确度 计算机所能表示的数的范围和精确度与所采用的数据类型和字长有关。
-
3.存储和处理的代价 设计出的数据格式要便于存储和处理。
-
4.软件的可移植性 设计数据格式时,要充分考虑软件的可移植性。
2.2 数值数据的表示
2.2.1 数的机器码表示
- 原码表示
1) 0的表示有+0根-0,两种原码表示0.000…0跟1.000…0 ;
原码表示的优点是直观,真值与原码转化简单。但是运算复杂,不利于运算器设计的简化。
- 反码表示
- 补码表示
引入补码数据表示的目的就是希望能方便带符号数的加减运算。
二进制补码的求法
1) 根据补码的定义求补码。
[x]补码 = 模 + x(mod模) ,x可正可负,利用这种方法需要事先求出 模的值。
2) 利用反码求补码
因为 [x] 补码 = [x]反 + 2^-n (n b表示小数点后的位数)
说明求一个负数的补码 ,可以在其反码的基础上通过最低位加一的方式得到。
3) 利用扫描方法求补码
扫描方法可以很方便地将一个负数从真值或原码表示直接变换成 补码,具体方法是 对数值位 按照从低位到高位的顺序扫描,尾数第一个1以及其右边的0保持不变。其余各位求反,最后再将符号位置置1。
- 移码表示
移码可以通过真值 x 加上一个常数得到,这个常数也成为 偏置值 ,增加常数的操作相当于 x 在数轴上向正方向平移了一段距离,这就是被称为 移码 的原因,移码也可以称为 增码 。
即[x]移 = x + 偏移值。
经观察 得知 移码数据表示 具有下列特点
1) 移码的符号位中 0 表示负数 , 1 表示 正数。
2) 同一数值的移码 与 补码除符号位相反以外,数值位相同。
3 ) 移码中 0 的表示也唯一 , 具体表示为 100000…0。
将 移码 作为 浮点数的阶码 具有下列优点:
1 ) 移码通过偏移的方法把 真值 映射到 正数域,这样子可以直接按照无符号数规则比较两个移码表示数据的大小,便于浮点数的比较。
2) 有利于简化 “机器零” 的判断。 当移码的各位均为 0 时,对应的 阶码值 最小。因此,尾数全为0时对应的就是 机器零。
2.2.2 数的定点表示
定点表示法 约定 机器中所有数据的 小数点 位置固定,其中,将小数点位置固定在数据的最高位之前(或符号位之后)的数据表示称为 定点小数 。而将小数点固定在最低数位之后的数据表示称为 定点整数。因为小数点位置固定,因而小数点可不必再用记好表示,也无需存储。
- 定点小数
设定点小数 x 的形式 为 x = x0,x1,x2,…,xn ,其中 x0是符号位 , x1 ~ xn为数值的有效部分,也称为 尾 数 ,x1 为 最高有效位。
- 定点整数
定点数能表示的数据范围 与 下列因素 有关。
1) 字长 。 一般来说, 字长越长 ,表示的数据范围就越大 。
2) 所采用的 机器数 表示方法。通过对前几种不同机器数的分析可知,补码和移码数据 表示 所能表示的数据范围比原码 和 反码所能表示的数据范围 要 多一个数据单位。
- 定点数 的 数据 表示范围。
定点数 的数据表示范围 与 字长 及 采用的机器数形式等因素有关 ,当字长 为 n+1(包含一个符号位),分别采用原码,反码,补码和移码数据表示时,对应的数据表示特征 如下图所示。
2.2.3 浮点数据表示
1.浮点数据表示的一般格式
对于 任意 一个二进制数N都可以表示为: N = 2 ^ E * M;
浮点表示法是 小数位置点 在数据中 不固定,即小数点在数中可以浮动的一种数据表示方法,由阶码 和 尾数 两部分组成,其中阶码的位数决定数据的范围,尾数的尾数决定数据的精确度。
E为阶码 的符号, M 表示 尾数 的符号 。
2. IEEE 浮点数据表示
因为在浮点数据的表示中,因为不同机器 可能 选用不同基,不同的阶码 及 尾数的位数,从而导致不同机器浮点数据表示的差异性较大,不利于软件的移植。
为此,美国一个协会 IEEE 于 1985 年 提出了浮点数标准 IEEE 754,现在该浮点数标准 已被 主流计算机所采用 。
1 ) 32 位 IEEE 754 单精度 浮点数格式
组成 : 符号位S(0正1负),阶码部分 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 * 2^(E-127) * 1.M;
下面我们简单来看个两个相互转换的例子
2.2.4 十进制数的二进制编码 与 运算
- 有权码
8421码,2421码。
8421码 就是 一种常用的 BCD码。各位权值如下。
二进制数码 | x3 | x2 | x1 | x0 |
---|---|---|---|---|
权值 | 2^3 | 2^2 | 2^1 | 2^0 |
对 8421 码实现算术运算时,其结果要进行修正。加法修正的规则如下:
- 无权码
无权码 用 二进制表示一个十进制数码时 , 他的各位都没有确定的权。此类码中有 余3码 ,格雷码。
余3码 是常用的 一种无权码,他是从4位二进制数中顺序选取 0011 ~~ 1100 这10个编码 , 分别对应 0 - 9这10个代码。
从表中我们可以得知 , 余 3 码 是在 8421 码的基础上,把每个代码 加 0011 形成的 。
2.3 非数值数据的表示
2.3.1 字符的表示方法
国际上广泛采用美国国家信息交换标准代码 , 简称 ASCLL码来表示字符。
他选用了常用的 128 个符号 ,其中包括33个控制字符,10个十进制数码,52个英文大写和小写,33个专用符号。
128 个 字符 分别用128个二进制数码串表示。
128 个 字符可以用 7 位二进制数 对他们进行编码,即用 0000000 ~ 1111111共128 种不同的数码串分别表示128个字符,如果在加上一个校验码,正好可以用一个 字节 (8位) 表示一个字符。
2.3.2 汉字编码
一:计算机要对汉字信息进行处理 。要经过如下步奏
1.汉字 由 汉字输入码 转换成 计算机可以识别的二进制形式。
2.转换成内码被计算机处理。
3.如果需要显示 和 打印汉字,还要将 汉字的内码 转换成 字形码。
编码的方式 无外乎 以下 4 大类。
二:汉字机内码
汉字机内码 是 计算机内 存储和处理汉字时使用的编码。
汉字机内码 与 区位码 之间的 对应 关系为:区位码 + A0A0H。
由于文本中通常混用 使用汉字 和 西文字符,所以要对其进行区分。
此问题的解决方法之一是:将一个汉字看成是两个扩展ASCLL码,使得表示汉字的两个字节最高位都为 1 ,这样子就能区分一个机内码到底对应的一个汉字还是两个英文字符。
三: 汉字字形码
字形码 是 汉字 的输出码,输出汉字时都采用图形方式,无论汉字的笔画多少,每个汉字都可以写在同样大小的方块中,每个汉字都有相应的字形码。
目前大多数汉字系统都是以点阵的方式来存储和输出汉字的字形。有笔画的位置用黑点表示,没有的用白点表示。
在计算机中用一组二进制数表示点阵,用0表示白点,1表示黑点,一般的汉字系统中汉字字形点阵有16 * 16, 24*24, 48 * 48。
点阵越大,对汉字的修饰能力就越强,打印质量就越好。
一个 16 * 16 点阵的汉字字形码需要 2 * 16 = 32 个字节表示,这32个字节 中的信息是汉字的数字化信息。即汉字字模。
汉字字模按国标码的顺序排列,以二进制文件的形式存放在存储器中,构成汉字字模字库。 简称 汉字库。
2.4 数据信息的校验
受元器件的质量,电路故障或噪音干扰等因素的影响,计算机在对数据进行处理,传输及存储过程中,往往会出现错误。如何发现或纠正上述过程中的数据错误,如何发现或纠正上述过程中的数据错误,人们提出了基于编码的解决方法。
为了实现检测或纠错, 在 被效验的数据中 增加一些冗余码(校验码)。
使数据按照某种规则编码以后,具有发现错误的能力,甚至能指出错误的所在位置,然后借助逻辑线路自动纠正。这种具有发现错误 或 同时能给出 错误所在位置的数据编码 ,就称为 数据校验码 。
利用校验码 实现对数据信息的效验,目的是提高计算机的可靠性。
2.4.1 码距 与 数据校验
码距 : 通常将一组编码中任何两个编码之间不同代码的位数称为 这两个编码的距离, 简称为码距。
例如 4 位二进制编码 0011 与 0001 仅有一位不同,这两组编码的码距为1。
对于一个编码体质,将其中所有的合法码距的最小值称为这个编码体质的码距。
我们先来看两个栗子:
码距是编码体质 里 的一个重要概念,通过上面的例题不难看出,通过增加码距就能把一个不具备检错的编码变成具有检错功能的编码。
校验码就是利用这一原理,在正常编码的基础上,通过增加一些附加的校验码而形成。因为增加效验的同时也增加了码距,当码距增加到一定程度时,校验码不仅具有检错功能,而且还可具有纠正错误的能力。
根据上述关系,可得到码距的检错 与 纠错能力如下图所示。
在确定与使用数据校验码时,应该考虑在不过多增加硬件开销的情况下,尽可能发现或改正更多的错误。常用的数据校验码有 奇偶校验码 , 海明校验码 ,和 循环冗余校验码 。
2.4.2 奇偶校验
奇偶校验是一种常见的简单校验 。通过检测校验码中 1 的个数的奇偶性是否改变来判断数据是否出错。
简单奇偶校验
奇偶校验包含奇校验和偶校验两种校验。奇校验(Odd Parity)是这样一种校验:它所约定的编码规律是,让整个校验码(包含有效信息和校验位)中“1”的个数为奇数。而偶校验(Even Parity)约定的编码规律是,让整个校验码中“1”的个数为偶数。有效信息(被校验的信息)部分可能是奇性(“1”的个数为奇数)的,也可能是偶性的,所以奇、偶两种校验都只需配一个校验码,就可以使整个校验码满足指定的奇偶性要求。这个校验位取“0”还是“1”的原则是:若是奇校验,则连同校验位在内编码里含“1”的个数共有奇数个;若是偶校验,则连同校验位在内编码里含“1”的个数是偶数个。
那么经过上述的规则的总结,我们可以得到
- 偶校验只具有发现出现奇数个代码出错的能力;奇偶校验只具有校验功能,即发现错误的能力,发现后也不能定位哪里出错,故不能纠正错误。
交叉奇偶校验
为克服简单 奇偶校验码 不能检测 有偶数位错误的不足 ,人们提出了交叉奇偶校验 的方法,也称为水平/垂直校验码 。
基本原理 : 对多个数据块同时进行横向和纵向的奇偶校验。
2.4.3 海明校验
不仅仅具有检测错误的能力 , 同时还具有给出错误所在准确位置的能力 。
这里介绍具有检出 和 校正 一位 错误的海明码。
2.4.4 循环冗余校验(CRC)
循环冗余校验是一种基于模2运算建立编码的校验码 。
CRC 在磁存储器 和 计算机通信方面应用较多。
模2运算
1)模2加减运算就是按位加减运算,即不带进位 和 借位 的二进制加法和减法运算,模2加和模2减运算结果相同,运算规则如下:
2)模2乘运算
模2乘运算即按摸 2 加 求部分积之和,无进位。
3) 模2除运算
模2除运算即按模2减求部分余数,不借位。
原则:
(1)部分余数首位为1时,商为1,减除数。
(2)部分余数首位为0时,商为0,减为0.
(3)当部分余数的位数小于除数的位数时,该余数为最后余数.
2.循环冗余校验
因模2加,R(x) + R(x) = 0,所以:
当不出错时,CRC码一定能被G(x)除尽。
下面我们来看一个例题:
接受方利用G(x)对收到的编码多项式做模2除运算。
如果余数为0说明传输没有错误。
(7,4)编码不同数位出错对应的余数