update draft

This commit is contained in:
ClovertaTheTrilobita 2026-09-17 22:24:14 +08:00
parent 0b2c6902cc
commit 97bdca04f9

View file

@ -221,4 +221,49 @@ unsigned int i = 129;
我们回忆一下手写运算。 我们回忆一下手写运算。
当我们计算$1011101+0101100$ 当我们计算$1011101+0101100$时,用竖式来计算就是
$$
\begin{array}{r}
1011101 \\
+\,0101100 \\
\hline
10001001
\end{array}
$$
也就是,对每一位数单独进行加法运算,如果加和结果≧2,则向高位进1。
同样地,计算机进行加法运算也是这种思路。我们先试想一个最简单的加法电路:**一位全加器**。
在进行一个单位的加法时,我们需要处理**三个输入**:加数$A_i$、加数$B_i$、来自低位的进位$C_{i-1}$。它也会产生**两个输出**:加和结果的本位$S_i$和想高位的进位$C_i$。
我们先来分析一下如何计算$S_i$:
- 当$A_i$与$B_i$相同,它们俩的加和结果的本位肯定是`0`。毕竟$0+0=0$,$1+1=10$。
- $A_i$与$B_i$不同是,它们的加和结果肯定是`1`。
根据这一思路,计算二进制$A_i+B_i$可以用逻辑电路XOR表示,即$A_i \oplus B_i$。
现在我们把进位$C_i$用同样的思路放进这个加法式中:若$(A_i \oplus B_i)$和$C_i$相同则为`0`,$(A_i \oplus B_i)$和$C_i$不同则为`1`。即计算可以用$(A_i \oplus B_i) \oplus C_i$来表示,那么就有:
$$
S_i = A_i \oplus B_i \oplus C_i
$$
我们接下来看进位$C_i$:
- 当$A_i$和$B_i$均为`1`,则产生进位。毕竟$1+1=10$。
- 当$A_i$和$B_i$只有一个为`1`时:
- 若上一位运算的进位$C_{i-1}$是`1`,则产生进位。
- 如果$C_{i-1}$是`0`,那$1+0=1$肯定不产生进位。
从结果上来讲,就是:$A_i$为`1`**且**$B_i$为`1`,**或**,$A_i$和$B_i$**相异** **且** $C_i$为`1`。
整理成逻辑表达式就是:
$$
C_i=A_iB_i+(A_i \oplus B)C_{i-1}
$$
那么一位全加器的逻辑结构就如下图所示。
<img src="https://files.seeusercontent.com/2026/09/17/s8Ns/eeb551b.png" alt="一位全加器.png" title="一位全加器" style="display: block; margin: 0px auto; zoom: 50%;">
我们把它封装起来,仅对外保留输入输出,那它的逻辑符号表示为:
<img src="https://files.seeusercontent.com/2026/09/17/Ut1i/drawio.png" alt="一位全加器.png" title="一位全加器" style="display: block; margin: 0px auto; zoom: 67%;">