本 Wiki 开启了 HTTPS。但由于同 IP 的 Blog 也开启了 HTTPS,因此本站必须要支持 SNI 的浏览器才能浏览。为了兼容一部分浏览器,本站保留了 HTTP 作为兼容。如果您的浏览器支持 SNI,请尽量通过 HTTPS 访问本站,谢谢!
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录前一修订版后一修订版 | 前一修订版 | ||
cs:comp_n_arch:courses:fnti_i:week_2 [2024/04/17 12:36] – codinghare | cs:comp_n_arch:courses:fnti_i:week_2 [2024/04/17 13:58] (当前版本) – [Signed Bit(原码)] codinghare | ||
---|---|---|---|
行 5: | 行 5: | ||
二进制数以 '' | 二进制数以 '' | ||
===二进制表示数字=== | ===二进制表示数字=== | ||
- | ==二进制转十进制== | + | ==Binary to Decimal== |
二级制按照如下的规则转化为十进制: | 二级制按照如下的规则转化为十进制: | ||
* 从左到右,从 0 开始,每一位的权为 $2^n$ | * 从左到右,从 0 开始,每一位的权为 $2^n$ | ||
行 15: | 行 15: | ||
\\ \\ | \\ \\ | ||
也就是如果有 '' | 也就是如果有 '' | ||
- | $$ | + | |
- | 可以写成: | + | |
$$ | $$ | ||
1 + 2 + 4 +...+2^{k-1} = 2^k - 1 | 1 + 2 + 4 +...+2^{k-1} = 2^k - 1 | ||
$$ | $$ | ||
- | $$ | + | ==Fied word size== |
+ | 计算机中字的长度是有限的,因此表示的范围也是有限的。理想情况下,一个 '' | ||
+ | ==Decimal to Binary== | ||
+ | 按之前转化的逆顺序: | ||
+ | * 找出当前 10 进制中最大的,可以通过 '' | ||
+ | * 从当前数中减去该数 | ||
+ | * 重复上面两步,直到只剩 '' | ||
+ | 这个过程相当于是在还原二级制构造十进制的过程。因此,之前能找出来的数证明其对应的 Bit 上都是 '' | ||
+ | \\ \\ | ||
+ | {{ : | ||
+ | \\ \\ | ||
+ | ====Binary Addition==== | ||
+ | 二进制的加法与十进制类似,按位相加: | ||
+ | \\ \\ | ||
+ | {{ : | ||
+ | \\ \\ | ||
+ | 如果遇到 '' | ||
+ | \\ \\ | ||
+ | {{ : | ||
+ | ===overflow=== | ||
+ | 如果最后一位相加也需要进位,此时结果长度超出了字的长度。我们称该情况为加法溢出(// | ||
+ | ===Adder 的设计=== | ||
+ | 从这个思路出发,Adder 的设计分为: | ||
+ | * Half Adder:负责两个 Bit 的相加 | ||
+ | * Full Adder:负责三个 Bit,即两个 Bit 与 carry 的相加 | ||
+ | ==Half Adder== | ||
+ | //Half Adder// 完成的工作是将两个 Bits 相加。那么: | ||
+ | * 输入:两个 bits | ||
+ | * 输出:一个 bit (和),一个 carry(进位) | ||
+ | 需要注意的是,两个 Bits 相加只和当前的 Bit 有关。只要是 '' | ||
+ | \\ \\ | ||
+ | {{ : | ||
+ | ==Full Adder== | ||
+ | //Full Adder// 完成的工作是将两个 Bits 与 carry 位相加: | ||
+ | * 输入:bit a, b, c | ||
+ | * 输出:sum, | ||
+ | 其真值表也非常容易得到: | ||
+ | \\ \\ | ||
+ | {{ : | ||
+ | ==Multi-bit Adder(16bits)== | ||
+ | 这个 adder 由一系列的 half adder 和 full adder 组成。准确的来说,是 15 个 full adder 与 1 个(最右边的)half adder 组合在一起,组成了 16 bits 的,带进位的加法计算器。 | ||
+ | ====Negative Numbers==== | ||
+ | 表示负数的方式有三种: | ||
+ | * signbit(原码) | ||
+ | * Complement (补码) | ||
+ | ===Signed Bit(原码)=== | ||
+ | 这种方式使用二进制的最高位作为符号位,以此来区分正负数。其他位不变,比如: | ||
+ | <code cil> | ||
+ | 000 -> 0 100 -> -0 | ||
+ | 001 -> 1 101 -> -1 | ||
+ | 010 -> 2 110 -> -2 | ||
+ | 011 -> 3 111 -> -3 | ||
+ | </ | ||
+ | 这种方法通常不会采用,有几个大的缺点: | ||
+ | * '' | ||
+ | * 加减法无法处理。比如 '' |