📝 我的笔记

还没有笔记

选中页面文字后点击「高亮」按钮添加

Lec01-Numbers-260122打印2.ZH

📜 原文
📖 逐步解释
∑ 公式拆解
💡 数值示例
⚠️ 易错点
📝 总结
🎯 存在目的
🧠 直觉心智模型
💭 直观想象

117. 数字编码

无符号 符号 & 幅度 1 的补码 2 的补码
000 0 +0 +0 +0
001 1 +1 +1 +1
010 2 +2 +2 +2
011 3 +3 +3 +3
100 4 0 -3 -4
101 5 -1 -2 -3
110 6 -2 -1 -2
111 7 -3 0 -1
8个值 7个值,2 个零 7个值,2 个零 8个值,1 个零

有符号幅度和 1 的补码浪费了一个位模式:2 个表示 0

无符号 符号 & 幅度 1 的补码 2 的补码
000 0 +0 +0 +0
001 1 +1 +1 +1
010 2 +2 +2 +2
011 3 +3 +3 +3
100 4 -0 -3 -4
101 5 -1 -2 -3
110 6 -2 -1 -2
111 7 -3 -0 -1
8个值 7个值,2 个零 7个值,2 个零 8个值,1 个零

117.1 数字编码

2 的补码最小的负数表示没有正数对应 翻转位并加 1 的过程不能成功地取反数字
无符号 符号 & 幅度 1 的补码 2 的补码
000 0 +0 +0 +0
001 1 +1 +1 +1
010 2 +2 +2 +2
011 3 +3 +3 +3
100 4 0 -3 -4
101 5 -1 -2 -3
110 6 -2 -1 -2
111 7 -3 0 -1
8个值 7个值,2 个零 7个值,2 个零 8个值,1 个零

在 2 的补码中,二进制加法算法总是有效的(除非发生溢出)!

$$ \begin{aligned} & \text {-e.g., } \\ & \qquad \begin{array}{lr} 111 & \\ +0101 & 5 \\ +1101 & -3 \\ 0010 & 2 \end{array} \end{aligned} $$

217.2 使用二进制加法算法

当发生溢出时结果 $2^{\text{字长}}$

218. 2 的补码的特殊之处

118.1 模运算与溢出的关联

218.2 补码环形表示(风车)

011

+110

318.3 C语言中的补码示例

011

```

int main() {

int x = 47;

int y=-50;

unsigned int z = 50;

printf("%d %d %uln", x, y, z);

}

```

你(无意中在哪里使用过 2 的补码

```

int main() {

int x = 47;

int y=-50;

unsigned int z = 50;

printf("%d %d %uln", x, y, z);

}

```

418.4 “翻转位+1”的直观解释

负值正好对面

2 的补码

所有位翻转的值正好对面顺时针少 1 刻度

518.5 “翻转位+1”的正式证明

319. 表示 vs. 操作

119.1 k-位字 & 各种表示的范围

420. 获取表示

120.1 获取表示

521. 表示 vs. 操作 (总结)

622. 自动化减法

$$ \begin{aligned} & 001110 \\ & 010101 \end{aligned} $$

122.1 自动化减法示例

$$ \begin{array}{r} 001110 \\ -010101 \end{array} \longrightarrow-\begin{array}{r} 0110 \\ 010101 \\ \hline 001110 \\ \hline 000111 \end{array} $$

723. 2 的补码减法:利用 BAA

$$ \begin{array}{r} 001110 \\ -010101 \\ \hline \end{array} $$

123.1 补码减法示例

2 的补码减法利用 BAA

$X=111001, -X=000111=7, X=-7$

824. 检测溢出

对于无符号 | 111 |

:---
$\underline{1010}$
1000

925. 2 的补码中的溢出检测很简单

-如果最终两个进位匹配则没有溢出
- 如果不同则溢出
- 例如,字长 $=4$
$5+1=6$ $-5+-3=-8$ $-2+7=5$ $-2+-7=-9$
00 11 11 10
+ + + +
$\underline{0001}$ $\underline{1101}$ 0111 $\underline{1001}$
0110 1000 0101 0111

$$ \begin{aligned} & \begin{array}{l} 7+7=14 \\ 0 \\ 0111 \\ +{ }_{\underline{0111}}^{\underline{0111}} \\ \text { overflow } \end{array} \end{aligned} $$

1026. 为什么 2 的补码溢出检测有效的证明

$O Y_{k-2} Y_{k-3} \ldots Y_{0}$

错误

加法

126.1 情况2:两者皆负

$$ \begin{aligned} & A B \\ + & 1 X_{k-2} X_{k-3} \ldots X_{0} \\ & 1 Y_{k-2} Y_{k-3} \ldots Y_{0} \end{aligned} $$

226.2 情况3:一正一负

两位字
word
关联值
Value
00 1
01 3
10 6
11 2

1127. 关于溢出的最后思考

两位字
word
关联值
Value
00 1
01 3
10 6
11 2

$$ \begin{aligned} & 00+00=11 \text { (i.e., } 1+1=2 \text { ) } \\ & 00+01=? \text { ? } \\ & 1+3 \text { should equal } 4 \text {, but no 2-bit combo } \\ & \text { represents } 4 \end{aligned} $$

127.1 溢出示例分析

两位字
word
关联值
Value
00 1
01 3
10 6
11 2

$$ 00+00=11 \text { (i.e., } 1+1=2 \text { ) } $$

$$ 00+01=? ? $$

$1+3$ 应该等于 4,但没有 2-位组合表示 4

因此对于此表示,00+01 导致溢出

1228. 浮点

1329. 需要更大的范围?浮点表示

$$ -7.776 \times 10^{3}=-7776=-6^{5} $$

尾数

注意尾数总是采用 X.XX... 形式

(又名小数部分

小数点前一位)

129.1 浮点表示示例

$$ -7776 \times 10^{3}=-7776=-65 $$

尾数

注意尾数总是采用 X.XX... 形式

(又名小数部分

小数点前一位)

$$ -1.10 \times 2^{0111}\left(=-1.5^{*} 2^{7}\right) $$

注意正确形式中,对于二进制尾数总是 1.XX... (小数点前一位,且该位总是 1)

唯一例外$0=0.0 \times 2^{0}$

1430. 浮点数的标准形式

3130292827262524232221201918171615141312111009080706050403020100

符号 小数部分 (尾数)

1531. IEEE 754 浮点描述

3130292827262524232221201918171615141312111009080706050403020100

$\frac{5}{5}$ 指数 小数部分 (尾数)

3130292827262524232221201918171615141312111009080706050403020100

1000011011010000000000000000000

1632. 偏移量和浮点数比较

132.1 步骤2:检查指数

232.2 步骤3:检查小数部分

332.3 步骤4:完全相等与有符号比较的相似性

哪个 IEEE 754 FP \# 最大

1733. IEEE 754 64-位 (双精度)

1 31/30292827262524232221201918171615141312111009080706050403020100
指数 小数部分 (高位)

3130292827262524232221201918171615141312111009080706050403020100

2 小数部分 (低位)

1834. 下溢

1935. 讲座结束