OF = Carry_In(bit7) XOR Carry_Out(bit7) —— 为什么进出不一致就意味着溢出
bit7 就是一个全加器,三个输入,两个输出:
A[7] XOR B[7] = 1(符号不同),无论 Carry_In 是什么,进出始终一致:
| A[7] | B[7] | Carry_In | 计算过程 | Sum[7] | Carry_Out | OF = In XOR Out |
|---|---|---|---|---|---|---|
0 |
1 |
0 |
0+1+0 = 01 | 1 |
0 |
0 XOR 0 = 0 ✔ |
0 |
1 |
1 |
0+1+1 = 10 | 0 |
1 |
1 XOR 1 = 0 ✔ |
1 |
0 |
0 |
1+0+0 = 01 | 1 |
0 |
0 XOR 0 = 0 ✔ |
1 |
0 |
1 |
1+0+1 = 10 | 0 |
1 |
1 XOR 1 = 0 ✔ |
进位进来一定也出去,或者不进来也不出去——进出始终一致,OF 永远 = 0。
| Carry_In | 计算过程 | Sum[7] | Carry_Out | OF | 发生了什么 |
|---|---|---|---|---|---|
0 |
0+0+0 = 00 | 0 |
0 |
0 | 符号位 = 0(正数),正确 ✔ |
1 |
0+0+1 = 01 | 1 |
0 |
1 | 低位进位把符号从 0 挤成 1,正数变负数 ❌ |
| Carry_In | 计算过程 | Sum[7] | Carry_Out | OF | 发生了什么 |
|---|---|---|---|---|---|
0 |
1+1+0 = 10 | 0 |
1 |
1 | 两个 1 产生进位,符号清成 0,负数变正数 ❌ |
1 |
1+1+1 = 11 | 1 |
1 |
0 | 进位进来也出去,符号保持 1(负数),正确 ✔ |
| A[7] | B[7] | Carry_In | Carry_Out | OF = In XOR Out | 含义 |
|---|---|---|---|---|---|
0 |
0 |
0 |
0 |
0 | 两正相加,无溢出 |
0 |
0 |
1 |
0 |
1 | 进位被困,正→负 |
0 |
1 |
0 |
0 |
0 | 一正一负,不可能溢出 |
0 |
1 |
1 |
1 |
0 | 一正一负,不可能溢出 |
1 |
0 |
0 |
0 |
0 | 一负一正,不可能溢出 |
1 |
0 |
1 |
1 |
0 | 一负一正,不可能溢出 |
1 |
1 |
0 |
1 |
1 | 进位凭空产生,负→正 |
1 |
1 |
1 |
1 |
0 | 两负相加,进位穿过,无溢出 |