《编码,藏匿在计算机软硬件背后的语言》读书笔记
1、逻辑门与真值表
2、半加器
把两个二进制位的加法分解为加法运算和进位运算
3、全加器
+111111
111111
1111111
如上:半加器只能做右边第一列的计算,因为其他所有列的计算还需要一个进位输入,所以我们需要两个半加器。另外,排除所有的可能以后,两个半加器的进位输出不可能同时为1,根据真值表,我们还需要一个或门。
4、8位加法器
将8个全加器按如下方式串联,便可以得到一个可以进行8位运算的加法器
5、如何计算减法
例如计算253-176,传统方式我们像下面这样算:
253
-176
77
但是,在计算各位和十位的时候我们需要借位,然而如果我们像上面一样用逻辑门来实现借位的话,会非常复杂,有没有简单的办法呢?
换一个方式计算上面的算式:
253-176 = 253-176+1000-1000
= 253-176+999+1-1000
= 253+999-176+1-1000
= 253+823+1-1000
= 1076+1-1000
= 1077-1000
= 77
这样我们在不发生借位的情况下,完成了253-176的计算,同时我们把999-176叫做176对9求补数。
同样,在二进制中我们也可以这样计算,把上面的253-176转化成二进制后问题变为
11111101-10110000 = 11111101-10110000+100000000-100000000
= 11111101-10110000+11111111+1-100000000
= 11111101+11111111-10110000+1-100000000
= 11111101+1001111+1-100000000
= 101001100+1-100000000
= 101001101-100000000
= 1001101
1001101转换成十进制就是77,结果是正确的。我们把11111111-10110000叫做10110000对1求补数,但是在二进制中我们求补时不需要用减法,只要直接对10110000取反就行了,用反相器就可以实现了。
上面都是减数小于被减数的情况,如果减数大于被减数时怎么办?