| 进位制 | 基数 | 数码 | 权 |
|---|---|---|---|
| 二进制 | 2 | 0, 1 | 2^i |
| 八进制 | 8 | 0~7 | 8^i |
| 十进制 | 10 | 0~9 | 10^i |
| 十六进制 | 16 | 0~9, A~F | 16^i |
125 ÷ 2 = 62 ... 1 (余数)
62 ÷ 2 = 31 ... 0
31 ÷ 2 = 15 ... 1
15 ÷ 2 = 7 ... 1
7 ÷ 2 = 3 ... 1
3 ÷ 2 = 1 ... 1
1 ÷ 2 = 0 ... 1
从下往上读取:125(D) = 1111101(B)
10110110(B) = 1×2^7 + 0×2^6 + 1×2^5 + 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
= 128 + 0 + 32 + 16 + 0 + 4 + 2 + 0
= 182(D)
二进制 → 八进制:从小数点开始向左/右每3位一分
101 101 110 (B) = 5 5 6 (O)
八进制 → 二进制:每位用3位二进制表示
726(O) = 111 010 110 (B)
二进制 → 十六进制:从小数点开始向左/右每4位一分
1010 1101 0110 (B) = A D 6 (H)
十六进制 → 二进制:每位用4位二进制表示
3F9(H) = 0011 1111 1001 (B)
BCD(Binary-Coded Decimal):用二进制表示的十进制数
| 十进制数 | 8421BCD |
|---|---|
| 0 | 0000 |
| 1 | 0001 |
| 9 | 1001 |
| 59 | 0101 1001 |
| 255 | 0010 0101 0101 |
| 字符 | ASCII码(十进制) | ASCII码(十六进制) |
|---|---|---|
| '0' | 48 | 30H |
| 'A' | 65 | 41H |
| 'a' | 97 | 61H |
| 空格 | 32 | 20H |
| 回车 | 13 | 0DH |
| 编码类型 | 说明 | 位数 |
|---|---|---|
| 区位码 | 区码+位码 | 14位 |
| GB2312 | 6763个汉字 | 16位 |
| GBK | 21003个汉字 | 16位 |
| Unicode | 统一码 | 16/32位 |
| UTF-8 | Unicode转换格式 | 变长1-4字节 |
定义:最高位为符号位,0表示正,1表示负;数值部分用真值的绝对值表示。
例:+45 → 原码 = 00101101
-45 → 原码 = 10101101
特点: - 0有两种表示:+0 = 00000000,-0 = 10000000 - 运算复杂(需判断符号位) - 8位表示范围:-(2^7-1) ~ +(2^7-1) = -127 ~ +127
定义: - 正数:反码 = 原码 - 负数:符号位不变,数值位按位取反
例:+45 → 原码 = 00101101 → 反码 = 00101101
-45 → 原码 = 10101101 → 反码 = 11010010
特点: - 0有两种表示:+0 = 00000000,-0 = 11111111 - 8位表示范围:-127 ~ +127
定义: - 正数:补码 = 原码 - 负数:补码 = 反码 + 1
例:+45 → 原码 = 00101101 → 反码 = 00101101 → 补码 = 00101101
-45 → 原码 = 10101101 → 反码 = 11010010 → 补码 = 11010011
特点: - 0只有唯一表示:00000000 - 符号位可以参与运算 - 减法可以变为加法(模运算) - 8位表示范围:-128 ~ +127(多表示一个数:-128 = 10000000)
| 码制 | +0 | -0 | 8位范围 |
|---|---|---|---|
| 原码 | 00000000 | 10000000 | -127 ~ +127 |
| 反码 | 00000000 | 11111111 | -127 ~ +127 |
| 补码 | 00000000 | 无 | -128 ~ +127 |
负数补码快速转换:
补码 → 原码:再取一次补码
8位补码范围记忆: - 最大正数:01111111 = +127 - 最小负数:10000000 = -128 - 全部范围:-2^7 ~ +2^7-1
公式:
[A + B]补 = [A]补 + [B]补
[A - B]补 = [A]补 + [-B]补
注意:运算结果如果产生溢出(超出表示范围),结果错误!
条件:两个同号数相加,结果异号
| 操作 | 溢出条件 |
|---|---|
| 正+正→负 | 上溢(结果为负) |
| 负+负→正 | 下溢(结果为正) |
判断方法:
溢出 = Cn ⊕ Cn-1
其中Cn为最高位进位,Cn-1为次高位进位
例题1:用8位补码计算 52 - 37
52 = 00110100
-37 = 11011011 (补码)
00110100
+ 11011011
----------
100001111
溢出位丢弃,结果 = 00001111 = 15 ✓
例题2:用8位补码计算 89 + 45
89 = 01011001
45 = 00101101
01011001
+ 00101101
----------
10000110
结果 = 10000110 = -122 (错误!应为134,已溢出)
例题3:判断是否溢出:67 + 78
67 = 01000011
78 = 01001110
01000011
+ 01001110
----------
10010001
结果为10010001 = -111
两个正数相加得到负数,**溢出**!
| 类型 | 正数移位 | 负数移位(补码) |
|---|---|---|
| 左移 | 整体左移,低位补0 | 整体左移,低位补0 |
| 右移 | 整体右移,高位补0 | 整体右移,高位补1 |
算术左移:若不溢出,等价于乘2 算术右移:等价于除2(取整)
N = M × R^E
N:数值
M:尾数(可正可负)
R:基数(通常为2)
E:阶码(指数)
| 字段 | 位数 | 说明 |
|---|---|---|
| 符号位S | 1位 | 0正1负 |
| 阶码E | 8位 | 移码表示,偏置量127 |
| 尾数M | 23位 | 隐藏最高位1 |
真值 = (-1)^S × 1.M × 2^(E-127)
| E | M | 表示 |
|---|---|---|
| 0 | 0 | 0 |
| 0 | ≠0 | 非规格化数 |
| 1~254 | 任意 | 规格化浮点数 |
| 255 | 0 | 无穷大 |
| 255 | ≠0 | NaN |
例题1:将 -8.25 表示为IEEE 754单精度
1. 转二进制:-8.25 = -1000.01
2. 规格化:-1.00001 × 2^3
3. 确定各字段:
S = 1
E = 3 + 127 = 130 = 10000010
M = 00001(只取小数部分,前面的1隐藏)
4. 结果:1 10000010 00001000000000000000000
例题2:求 1 10000010 00001000000000000000000 的真值
1. S = 1(负数)
2. E = 10000010 = 130
3. M = 00001000000000000000000
4. 真值 = (-1)^1 × 1.00001 × 2^(130-127)
= -1.00001 × 2^3
= -1000.01
= -8.25
例题3:求 0 01111111 00000000000000000000000 的真值
1. S = 0(正数)
2. E = 01111111 = 127
3. 真值 = (-1)^0 × 1.0 × 2^(127-127)
= 1.0 × 2^0
= 1.0
| 字段 | 位数 | 偏置量 |
|---|---|---|
| 符号位S | 1位 | - |
| 阶码E | 11位 | 1023 |
| 尾数M | 52位 | 隐藏1位 |
| 运算 | 说明 | 溢出条件 |
|---|---|---|
| 加法 | A + B | 同号相加结果异号 |
| 减法 | A - B = A + (-B) | 同上 |
| 乘法 | 多次加法移位 | 结果超范围 |
| 除法 | 多次减法移位 | 除零、结果超范围 |
| 运算 | 符号 | 说明 |
|---|---|---|
| 与 | AND, & | 全1出1 |
| 或 | OR, | | 有1出1 |
| 异或 | XOR, ^ | 不同出1 |
| 非 | NOT, ~ | 取反 |
运算规则:
与(AND): 0∧0=0, 0∧1=0, 1∧0=0, 1∧1=1
或(OR): 0∨0=0, 0∨1=1, 1∨0=1, 1∨1=1
异或(XOR):0⊕0=0, 0⊕1=1, 1⊕0=1, 1⊕1=0
非(NOT): ~0=1, ~1=0
| 类型 | 操作 | 用途 |
|---|---|---|
| 逻辑左移 | 整体左移,低位补0 | 无符号数乘2 |
| 逻辑右移 | 整体右移,高位补0 | 无符号数除2 |
| 算术左移 | 同逻辑左移 | 有符号数乘2 |
| 算术右移 | 整体右移,高位补符号位 | 有符号数除2 |
ALU(Arithmetic Logic Unit):算术逻辑单元
┌─────────────────────┐
│ ALU │
│ │
输入A ──►│ ┌──► F (结果)
│ ┌──┐│
输入B ──►│ │ ▼│
│ ┌──┴─┴──┐│
│ │ 运算逻辑 ││
ALUop ──►│ └───────┘│
│ ▲ │
│ └──┘│
│ 标志位 │
└─────────────────────┘
A, B:操作数输入
ALUop:操作控制信号(决定做什么运算)
F:运算结果
下列进制转换中,正确的是( ) A. 125(D) = 1111101(B) B. 125(D) = 1111100(B) C. 125(D) = 1111111(B) D. 125(D) = 11111011(B)
8位补码表示的范围是( ) A. -127 ~ +127 B. -128 ~ +127 C. -128 ~ +128 D. -127 ~ +128
下列关于补码的说法,正确的是( ) A. 0有两种表示 B. 符号位不能参与运算 C. 减法不能变为加法 D. 正数补码不等于原码
IEEE 754单精度格式中,阶码的偏置量为( ) A. 127 B. 128 C. 1023 D. 2047
两个正数相加发生溢出,则( ) A. 结果为正 B. 结果为负 C. 结果为0 D. 结果可能正可能负
二进制数10110110转换为十进制为______。
8位原码表示中,-0的表示为______。
补码的优点之一是0的表示______。
IEEE 754中,规格化浮点数的尾数最高位隐含为______。
定点数表示中,小数点固定在______位之后的是定点小数。
将十进制数 169 转换为二进制、八进制、十六进制。
用8位补码计算:-67 - 45
判断下列补码运算是否溢出: (a) 67 + 45 (b) -89 + (-67)
将 -0.625 表示为IEEE 754单精度格式。
求 IEEE 754 表示 1 10000001 10100000000000000000000 的真值。
简述原码、反码、补码的区别。
为什么计算机中采用补码来表示有符号数?
简述IEEE 754单精度浮点数的格式。
第1题:
169 ÷ 2 = 84 ... 1
84 ÷ 2 = 42 ... 0
42 ÷ 2 = 21 ... 0
21 ÷ 2 = 10 ... 1
10 ÷ 2 = 5 ... 0
5 ÷ 2 = 2 ... 1
2 ÷ 2 = 1 ... 0
1 ÷ 2 = 0 ... 1
169(D) = 10101001(B) = 251(O) = A9(H)
第2题:
-67 补码 = 10111101
-45 补码 = 11010011
10111101
+ 11010011
----------
110001000
结果 = 01001000 = +72
无溢出(两个负数相加结果为负)
正确结果应该是 -112,已溢出!
第3题:
(a) 67 + 45:
01000011 + 00101101 = 01110000 = +112
两正数相加结果为正,无溢出
(b) -89 + (-67):
-89 补码 = 10100111
-67 补码 = 10111101
相加结果 = 01100100 = +100
两负数相加结果为正,溢出!
第4题:
-0.625 = -0.101(B)
规格化:-1.01 × 2^(-1)
S = 1
E = -1 + 127 = 126 = 01111110
M = 01000000000000000000000
结果:1 01111110 01000000000000000000000
第5题:
S = 1(负数)
E = 10000001 = 129
M = 10100000000000000000000
真值 = (-1)^1 × 1.101 × 2^(129-127)
= -1.101 × 2^2
= -1.101 × 4
= -110.1
= -6.5