What & How & Why

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
cs:comp_n_arch:courses:fnti_i:week_2 [2024/04/17 13:23] – [Half Adder] codingharecs:comp_n_arch:courses:fnti_i:week_2 [2024/04/17 13:58] (当前版本) – [Signed Bit(原码)] codinghare
行 50: 行 50:
 需要注意的是,两个 Bits 相加只和当前的 Bit 有关。只要是 ''1 + 1'',那么进位就是 ''1'',结果就是 ''0''。因此,我们可以得到如下的真值表: 需要注意的是,两个 Bits 相加只和当前的 Bit 有关。只要是 ''1 + 1'',那么进位就是 ''1'',结果就是 ''0''。因此,我们可以得到如下的真值表:
 \\ \\  \\ \\ 
-{{ :cs:comp_n_arch:courses:fnti_i:half_adder.svg?300 |}}+{{ :cs:comp_n_arch:courses:fnti_i:half_adder.svg?240 |}} 
 +==Full Adder== 
 +//Full Adder// 完成的工作是将两个 Bits 与 carry 位相加: 
 +  * 输入:bit a, b, c 
 +  * 输出:sum, carry 
 +其真值表也非常容易得到:
 \\ \\  \\ \\ 
 +{{ :cs:comp_n_arch:courses:fnti_i:full_adder.svg?270 |}} 
 +==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 
 +</code> 
 +这种方法通常不会采用,有几个大的缺点: 
 +  * ''-0'' 的定义,它与 ''0'' 的区别无法解释 
 +  * 加减法无法处理。比如 ''1 + (-1)'',也就是 ''001 + 101'', 结果是 ''110'',为 ''-2'', 不是 ''0''