本章介绍计算机中数据的表示方法,包括各种数制、数制转换、数值数据的编码(原码、反码、补码)、浮点数表示、字符编码和校验码等内容。理解数据在计算机中的表示是掌握计算机系统知识的基础。
本章重点:
本章难点:
计算机内部使用二进制表示数据,但为了便于人类阅读和书写,常使用八进制和十六进制作为二进制的缩写形式。
十进制是人们日常生活中最常用的数制,使用0-9十个数字符号,基数为10,逢十进一。
位权表示法:
例如:$(123.45)_{10} = 1 \times 10^2 + 2 \times 10^1 + 3 \times 10^0 + 4 \times 10^{-1} + 5 \times 10^{-2}$
二进制是计算机内部使用的数制,只使用0和1两个数字符号,基数为2,逢二进一。
特点:
位权表示法:
例如:$(1011.01)_2 = 1 \times 2^3 + 0 \times 2^2 + 1 \times 2^1 + 1 \times 2^0 + 0 \times 2^{-1} + 1 \times 2^{-2}$
$= 8 + 0 + 2 + 1 + 0 + 0.25 = (11.25)_{10}$
二进制与十进制对照表:
二进制 十进制 二进制 十进制 二进制 十进制
─────────────────────────────────────────────────────────────
0000 0 0101 5 1010 10
0001 1 0110 6 1011 11
0010 2 0111 7 1100 12
0011 3 1000 8 1101 13
0100 4 1001 9 1110 14
1111 15
八进制使用0-7八个数字符号,基数为8,逢八进一。
与二进制的关系:一位八进制对应三位二进制
应用:早期计算机系统中常用于简化二进制表示,现较少使用。
十六进制使用0-9和A-F十六个符号(A=10, B=11, C=12, D=13, E=14, F=15),基数为16,逢十六进一。
与二进制的关系:一位十六进制对应四位二进制
应用:广泛用于表示内存地址、颜色值、机器码等。
数制对照表: 十进制 二进制 八进制 十六进制 ────────────────────────────────────── 0 0000 00 0 1 0001 01 1 2 0010 02 2 3 0011 03 3 4 0100 04 4 5 0101 05 5 6 0110 06 6 7 0111 07 7 8 1000 10 8 9 1001 11 9 10 1010 12 A 11 1011 13 B 12 1100 14 C 13 1101 15 D 14 1110 16 E 15 1111 17 F
方法:按位权展开求和
示例1:将二进制 $(1101.01)_2$ 转换为十进制
$(1101.01)_2 = 1 \times 2^3 + 1 \times 2^2 + 0 \times 2^1 + 1 \times 2^0 + 0 \times 2^{-1} + 1 \times 2^{-2}$
$= 8 + 4 + 0 + 1 + 0 + 0.25 = (13.25)_{10}$
示例2:将十六进制 $(2A.8)_{16}$ 转换为十进制
$(2A.8)_{16} = 2 \times 16^1 + 10 \times 16^0 + 8 \times 16^{-1}$
$= 32 + 10 + 0.5 = (42.5)_{10}$
整数部分:除2取余,逆序排列
小数部分:乘2取整,顺序排列
示例:将十进制 $(25.375)_{10}$ 转换为二进制
整数部分(25):
余数
25 ÷ 2 = 12 ... 1 ↑
12 ÷ 2 = 6 ... 0 │
6 ÷ 2 = 3 ... 0 │ 逆序排列
3 ÷ 2 = 1 ... 1 │
1 ÷ 2 = 0 ... 1 ↓
结果:(25)10 = (11001)2
小数部分(0.375):
整数
0.375 × 2 = 0.75 ... 0 ↓
0.75 × 2 = 1.5 ... 1 │ 顺序排列
0.5 × 2 = 1.0 ... 1 ↑
结果:(0.375)10 = (0.011)2
最终结果:(25.375)10 = (11001.011)2
二进制转八进制:整数部分从右向左每3位一组,小数部分从左向右每3位一组,不足补零。
二进制转十六进制:整数部分从右向左每4位一组,小数部分从左向右每4位一组,不足补零。
二进制 ↔ 八进制/十六进制示例:
二进制: 1011010.1101
转八进制:
001 011 010 . 110 100
1 3 2 . 6 4
结果:(132.64)8
转十六进制:
0101 1010 . 1101
5 A . D
结果:(5A.D)16
真值:用正号、负号表示的数,如 +5、-7。
机器数:将符号数值化的数,用0表示正号,1表示负号。
真值与机器数示例: 真值 机器数(8位) ───────────────────────── +5 0 0000101 -5 1 0000101 +127 0 1111111 -127 1 1111111 ↑符号位(0为正,1为负)
定义:符号位加上数值的绝对值。
特点:
表示范围(n位):$-(2^{n-1}-1)$ 到 $+(2^{n-1}-1)$
8位原码示例: 十进制 原码(8位) ──────────────────── +0 00000000 -0 10000000 +1 00000001 -1 10000001 +127 01111111 -127 11111111
定义:
特点:
8位反码示例: 十进制 原码 反码 ───────────────────────────── +5 00000101 00000101 -5 10000101 11111010 +0 00000000 00000000 -0 10000000 11111111 +127 01111111 01111111 -127 11111111 10000000 计算示例: 00000101 (+5) + 11111010 (-5反码) ─────────────── 11111111 (-0)
定义:
特点:
表示范围(n位):$-2^{n-1}$ 到 $+(2^{n-1}-1)$
8位补码示例: 十进制 原码 反码 补码 ──────────────────────────────────────── +5 00000101 00000101 00000101 -5 10000101 11111010 11111011 +0 00000000 00000000 00000000 -0 10000000 11111111 00000000 +127 01111111 01111111 01111111 -127 11111111 10000000 10000001 -128 不存在 不存在 10000000
补码运算:
补码加法示例: 计算 5 + (-3): 00000101 (+5补码) + 11111101 (-3补码) ─────────────── 1 00000010 (进位舍弃) 结果:00000010 = +2 ✓ 计算 (-5) + (-3): 11111011 (-5补码) + 11111101 (-3补码) ─────────────── 1 11111000 (进位舍弃) 结果:11111000 → 取反加1 → 00001000 = -8 ✓
定义:在真值上加一个偏移量(常数)。n位移码的偏移量为 $2^{n-1}$。
公式:$[X]_{移} = 2^{n-1} + X$,其中 $-2^{n-1} \leq X < 2^{n-1}$
特点:
8位移码示例(偏移量128): 十进制 补码 移码 ──────────────────────────── -128 10000000 00000000 -127 10000001 00000001 ... ... ... -1 11111111 01111111 0 00000000 10000000 +1 00000001 10000001 ... ... ... +127 01111111 11111111
浮点数用于表示实数,采用科学计数法的形式:$N = (-1)^S \times M \times R^E$
其中:
浮点数存储格式: ┌────────┬─────────────┬─────────────────┐ │ 符号 │ 阶码 │ 尾数 │ │ (S) │ (E) │ (M) │ └────────┴─────────────┴─────────────────┘ 1位 k位 n位
规格化形式:尾数的最高位为1(对于二进制)。
例如:$0.01101 \times 2^3$ 规格化为 $0.1101 \times 2^2$
目的:保证表示的唯一性,提高精度。
IEEE 754是浮点数的国际标准,定义了单精度和双精度两种格式。
单精度格式(32位):
┌──────┬───────────────────────┬──────────────────────────────────────┐
│ S │ E(8位) │ M(23位) │
│ 1位 │ 偏移量127 │ 隐含最高位1 │
└──────┴───────────────────────┴──────────────────────────────────────┘
计算公式:$N = (-1)^S \times 1.M \times 2^{E-127}$
范围:约 ±1.18×10^-38 到 ±3.4×10^38
精度:约7位十进制有效数字
特殊值:
双精度格式(64位): ┌──────┬────────────────────────┬─────────────────────────────────────────────┐ │ S │ E(11位) │ M(52位) │ │ 1位 │ 偏移量1023 │ 隐含最高位1 │ └──────┴────────────────────────┴─────────────────────────────────────────────┘
计算公式:$N = (-1)^S \times 1.M \times 2^{E-1023}$
范围:约 ±2.23×10^-308 到 ±1.8×10^308 精度:约15-16位十进制有效数字
示例:将 -12.375 表示为IEEE 754单精度浮点数
步骤: 1. 转换为二进制:-12.375 = -1100.011 2. 规格化:-1.100011 × 2^3 3. 符号位 S = 1(负数) 4. 阶码 E = 3 + 127 = 130 = 10000010 5. 尾数 M = 10001100000000000000000 结果: 1 10000010 10001100000000000000000 十六进制:0xC1460000
ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是最常用的字符编码。
特点:
ASCII码表(部分): 十进制 字符 十进制 字符 十进制 字符 十进制 字符 ──────────────────────────────────────────────────────────────────── 48 '0' 65 'A' 97 'a' 49 '1' 66 'B' 98 'b' ... ... ... ... ... ... 57 '9' 90 'Z' 122 'z' 重要控制字符: 0 NUL(空) 9 TAB(制表) 10 LF(换行) 13 CR(回车) 27 ESC(退出) 32 SP(空格)
扩展ASCII:使用8位表示,共256个字符,增加了一些欧洲语言的符号。
Unicode是全球统一的字符编码标准,为世界上几乎所有字符分配唯一的数字编号。
特点:
UTF-8编码:Unicode的一种变长编码方式,与ASCII兼容。
UTF-8编码规则: Unicode范围 UTF-8字节序列 ───────────────────────────────────────── U+0000 ~ U+007F 0xxxxxxx U+0080 ~ U+07FF 110xxxxx 10xxxxxx U+0800 ~ U+FFFF 1110xxxx 10xxxxxx 10xxxxxx U+10000 ~ U+10FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 示例: 'A' (U+0041) → 01000001 '中' (U+4E2D) → 11100100 10111000 10101101 (E4 B8 AD)
GB2312:中国国家标准,收录6763个汉字和682个非汉字图形字符,双字节编码。
GBK:对GB2312的扩展,收录21003个汉字,兼容GB2312。
GB18030:最新国家标准,收录27484个汉字,单字节、双字节、四字节编码。
Big5:台湾地区的繁体汉字编码。
原理:在数据位后增加一位校验位,使1的个数为奇数(奇校验)或偶数(偶校验)。
特点:
奇偶校验示例: 数据 奇校验 偶校验 ───────────────────────────── 1011001 10110010 10110011 (4个1) (偶数个1) (奇数个1) 1000000 10000001 10000000 (1个1) (偶数个1) (奇数个1)
海明码(Hamming Code)是一种可以纠正一位错误的编码。
原理:在数据位中插入多个校验位,每个校验位负责校验特定的位组合。
校验位位置:位于 $2^i$ 的位置(1, 2, 4, 8, 16…)
海明码示例(4位数据,3位校验位):
位置: 1 2 3 4 5 6 7
P1 P2 D1 P3 D2 D3 D4
↑ ↑ ↑
校验位 校验位
校验关系:
P1 = D1 ⊕ D2 ⊕ D4(位置3,5,7)
P2 = D1 ⊕ D3 ⊕ D4(位置3,6,7)
P3 = D2 ⊕ D3 ⊕ D4(位置5,6,7)
CRC是一种基于多项式除法的校验方法,广泛用于数据通信和存储。
原理:将数据视为一个多项式,除以生成多项式,余数作为校验码附加在数据后。
特点:
1. 将十进制数25转换为二进制,结果是( )
A. 10111 B. 11001 C. 10011 D. 11101
2. 8位补码表示的范围是( )
A. -127 ~ +127 B. -128 ~ +127
C. -127 ~ +128 D. -128 ~ +128
3. 下列编码中,0的表示唯一的是( )
A. 原码 B. 反码 C. 补码 D. 移码
4. IEEE 754单精度浮点数的阶码偏移量是( )
A. 127 B. 128 C. 255 D. 256
5. ASCII码使用( )位表示一个字符
A. 4 B. 7 C. 8 D. 16
1. 二进制数101101.11转换为十进制是_。 2. 十进制数-15的8位补码是_。
3. 十六进制数A3.5转换为二进制是_。 4. 浮点数由_、_和_三部分组成。
5. 奇偶校验可以检测_位错误,海明码可以纠正_位错误。
1. 将十进制数125.625转换为二进制、八进制和十六进制。
2. 已知X = +1011,Y = -0101,用8位补码计算X + Y和X - Y。
3. 将-28.5表示为IEEE 754单精度浮点数(用十六进制表示)。
4. 设生成多项式G(x) = x³ + x + 1,数据为1011,计算CRC校验码。
1. 简述原码、反码、补码的区别和各自的特点。
2. 为什么要对浮点数进行规格化?IEEE 754标准是如何实现规格化的?
3. 简述海明码的基本原理。
参考答案:
一、选择题:1.B 2.B 3.C 4.A 5.B
二、填空题: 1. 45.75
2. 11110001
3. 10100011.0101
4. 符号位、阶码、尾数
5. 奇数、1