ch2 数据的表示、运算与校验¶
1. 数值型数据的表示¶
【进位计数制】在任一数制中,每一个数位上允许使用的记数符号的个数被称为该数制的基数。每一位对应一个表示该位在数码中的位置的值,这个值就称为数位的权值 \(w\)。
【带符号数的表示】\(0\) 表示正号,\(1\) 表示负号。
- 原码:一个二进制数,用 \(0/1\) 代码表示符号,数值位不变,就得到与该二进制数真值对应的原码。
- 反码:正数的反码与原码一致;负数的反码,是将其原码符号位保持不变,数值位分别按位取反。
- 补码:\([X]_{补} = X + 2^n\)(模 \(2^n\),\(n\) 为编码位数)。正数的补码与原码一致,负数的补码,是在其反码末位加 \(1\)。
- 移码:\([X]_{移} = 2^{n-1}+X\),其中 \(-2^{n-1}\le X < 2^{n-1}\)。移码通常用于表示浮点数的阶码,阶码一般为整数,故移码通常只用于表示整数。移码规则等价于将 \(X\) 正向平移或者增加 \(2^{n-1}\)。
- \([[X]_{补}]_{补} = [X]_{原}\)。
- 变补:\([X]_{补}\) 的二进制编码连同符号位一起取反,末位加 \(1\),即可得到 \([-X]_{补}\),也称为 \([X]_{补}\) 的机器负数。
- 正数的原码符号位取反,即得到移码。负数的原码连同符号位一起取反,末位再加 \(1\),即得到移码(与变补等效)。补码和移码,符号相反、数值位相同。
【定点数的表示】数的小数点固定在同一位置不变。
- 带符号定点小数:约定所有数的小数点的位置固定在符号位之后。
- 带符号定点整数:小数点的位置固定在最低数值位之后。
- 无符号定点整数:小数点的位置固定在最低数值位之后。
【浮点数的表示】浮点表示中,小数点的位置可按需浮动。
- 格式模型:
[阶符][阶码位.][数符][.尾数位],其中阶码为带符号定点整数,尾数为带符号定点小数。 - 相同字长时,浮点数的表示范围更大、精度更高。
- 机器格式:\(\tt E_fE_1..E_mM_fM_1..M_n\),其中 \(E_f\) 为阶符,\(M_f\) 为数符。
- 真值:\(N = \pm R^E \times M\)。其中 \(R\) 为阶码的底数,隐含约定为 \(2\);\(E\) 为阶码,补码或移码表示,其位数决定了数值的范围;\(M\) 为尾数,原码或补码表示,其位数决定了数值的精度。
- 尾数 \(M\) 的规格化:原码表示时,约定 \(1/2\le |M| < 1\),规格化以后尾数的最高有效位为 \(1\);补码表示时,约定 \(-1\le M<-1/2\),规格化后最高数值位为 \(1\),或 \(1/2\le M<1\),规格化后最高数值位为 \(0\)。
【IEEE754 格式】[数符S][阶码E][尾数M]
- \(32\) 位浮点数:阶码占 \(8\) 位,采用移码表示,阶符隐含,偏移量为 \(2^7-1\);尾数占 \(23\) 位,纯小数表示,真值 \(= 1+M\)。
- \(64\) 位浮点数:阶码占 \(11\) 位,采用移码表示,阶符隐含,偏移量为 \(2^{10}-1\);尾数占 \(52\) 位,纯小数表示。
- 为了确保浮点数表示的唯一性,约定 \(0\le M<1\)。
2. 字符型数据的表示¶
【ASCII 码】代码宽度 \(7\) 位,存储宽度为 \(7\) 位有效位 + \(1\) 位奇偶校验位。
【汉字编码】
- 输入码:数字码(区位码)、拼音码、字形码。
- 机内码:用于汉字信息的存储、交换、检索等操作的计算机内代码,一般用两个字节表示。
- 字模码:用点阵表示的汉字字形代码,是汉字的输出形式。
3. 数据处理与存储¶
【移位操作】
- 逻辑移位:数码位置变化,是循环左移。
- 算术移位:符号位不变、数码位置变化,是算术左移,空位补 \(0\)。
- 正数补码 / 原码移位规则:数符不变(对于双符号位,第 \(1\) 符号位不变),空位补 \(0\)(对于双符号位,右移时第 \(2\) 符号位移至尾数最高位)。
- 负数补码移位:数符不变,左移空位补 \(0\),右移空位补 \(1\)。
【舍入方法】\(0\) 舍 \(1\) 入;末位恒置 \(1\)。
【数位扩展与压缩】
- 符号扩展:直接把符号位填充到扩展位
- \(0-\) 扩展:高位均全补 \(0\)(针对无符号数)
- 位数压缩:弃高位、留低位
【数据存储】
- 小端模式:小地址单元存储数据的低位
- 大端模式:大地址单元存储数据的低位
【按边界对齐】要求数据的地址是相应的边界地址。假设存储字宽度为 \(32\) 为,字长 \(32\) 位,则字地址是 \(4\) 的倍数。
4. 基本运算方法¶
【定点数的运算】定点数一般用补码表示,符号位参与运算。
- 补码加减法:\((X+Y)_{补} = X_{补} + Y_{补}\),\((X-Y)_{补} = X_{补} + (-Y)_{补}\)
- 移码加减法:\([E1]_移 + [E2]_移 = [E1+E2]_补\),\([E1]_移 - [E2]_移 = [E1-E2]_补\)
【浮点数的运算】
- 低档微机:通过子程序
- 中档微机:通过浮点处理器(协处理器)
- 高档微机:通过专门的浮点运算部件
5. 常用的数据校验方法¶
【奇偶校验】增设 \(1\) 位校验位,从而使 \(1\) 的个数是奇数 / 偶数。不能发现偶数位错,也无法定位错误。
【海明校验】是一种多重分组奇偶校验;将代码组织为若干分组,每组进行奇偶校验;能够检验是否出错,也能定位出错位。每组均采用偶校验,填入校验码,组内具有偶数个 \(1\)。
【循环冗余校验】用待校验数据除以某个约定代码,能除尽则表明数据正确,否则通过循环移位校正出错位。