LOADING

加载过慢请开启缓存 浏览器默认开启

计组学习笔记(2):运算方法与运算器Ⅰ

数据表示方法

定点数

机器码

将有符号数中的符号位进行数字化编码得到机器码,原有符号数称为真值。
### 原码
* 用第一位表示符号位,正0负1;
* 真值转化为原码只需根据正负添加符号位;
* 0有2种表示;
* 运算不便;

补码

  • 正数补码和原码相同;
  • 负数的原码转补码相当于+\(2^{n - 1}\);从二进制码来看就是除符号位之外的数值位取反再加1;

反码

  • 正数的补码和反码相同;
  • 负数的反码转补码,除符号位之外的数值位取反;

移码

\[ [x_{移}] = x + 2^{n-1} \]
* 移码可用来表示浮点数的指数;
* 移码和补码尾数相同,符号位相反;

补码运算

\[ [x + y]_{补} = [x]_{补} + [y]_补 \]
\[ [x - y]_{补} = [x]_{补} - [y]_{补} \]
\[ -[y]_{补} = [-y]_{补} \]

注:已知\(y\)的补码,求\(-y\)的补码,按位取反+1即可;

溢出检测方法

双符号位法

变形补码

正数符号位用00表示,负数符号位用11表示;
* 运算后符号位变01,表示发生正溢出;
* 运算后符号位变10,表示发生负溢出;
* 运算后符号位为00或11,未溢出;
* 正确结果应该是最高符号位;

通过以上结果可以发现,溢出的情况有以下两种:
* 最高有效位发生进位,但第1符号位(即正常补码的符号位)未发生进位;
* 第1符号位发生进位,但最高有效位未发生进位;

所以,现代计算机中直接采用单符号位法用于溢出检测。

单符号位法

\[ OF = C_f \oplus C_0 \]

其中:
* \(OF\),溢出标志;
* \(C_f\),符号位的进位;
* \(C_0\),最高有效位的进位;

加法器

1位全加器

\[ S_i = A_i\oplus B_i \oplus C_i \]

\[ C_i = A_iB_i + (A_i\oplus B_i)C_i \]

电路图如下:

n位行波进位的补码加法器

观察上图,考虑\(n = 2\)的简单情况:
* 高1位等待低1位产生进位的时间为\(3T + 3T + T + T = 3T + 3T + 2T\)
* 在得到低一位的进位后,产生该位进位需要\(2T\)
* 最后产生溢出标志和进位标志需要\(3T\)

所以对于\(n\)位行波进位加法器,时间延迟为\(3T + 3T + (n - 1) * 2T + 2T + 3T = (2n + 9)T\)

如果不考虑溢出检测,最后不需要通过\(2T + 3T\),直接产生结果需要\(3T\),时间延迟为\(3T + 3T + 2(n - 1)T + 3T = 2(n - 1)T + 9T\)

先行进位加法器

加法器进位链的基本逻辑关系为:
\[ C_{i + 1} = A_iB_i + (A_i+B_i)C_i \]

令:
* \(G_i = A_iB_i\),本地进位;
* \(P_i = A_i + B_i\),进位传递条件;

于是:
\[ C_{i+1} = G_i + P_iC_i \]

由此可以递推出如下关系: