第一章写文字讲述理解写得我好累,这一章开始,想到什么讲什么,想不到就只有图了。顺带一提,本攻略没有那么追求极致的效率和布局,大佬轻喷。

二进制速算

口算题,不涉及电路,好好熟悉一下2的次方数再去做会比较快。

成对的麻烦

有两个及以上数量的真才为真,一共有四个输入。思路很简单,我只要保证每两个输入至少会接在同一个与门上即可,四个输入组合起来一共有六个可能,也就是会有六个与门,这些与门再由或门连接即可。

成对的麻烦

奇数个信号

奇数个真才为真,并且限制只能用三个元件。我在上高中的时候从数学老师那里学到印象最深的一个道理是,正难则反。这道题换个视角来看就是,偶数个真就是假。诶!异或门不就刚好是这个性质吗?所以这道题只需要两两输入接入一个异或门,再由一个异或门连接即可。

奇数个信号

信号计数

根据输入为真的数量输出二进制(3bits)。

关于1的思路很简单,因为只有当数字是奇数的时候才会为真。观察真值表可以发现,当奇数个真的时候,输出一定是奇数,所以接入输出一的电路和“奇数个信号”电路是一样的。

关于2我们也能找到一些规律,当至多只有一个真的时候,数字不会大于1,所以2肯定不会启用,也就是说当输入为真数量大于等于2的时候输出真,那么电路就和“成对的麻烦”一样了。但是问题是当输入全部为真的时候,2并不会启用,只有4启用。这个问题很好解决,给输出二接一个异或门就行,用与门判断如果全部都为真,将这个结果与上述电路接入异或门给到输出二即可。

其实这道题没有这么难,主要看你能不能关联到前面做的电路。

信号计数

加倍

新的元件。非常简单,每一个都乘二后输出,其实也就是左移了一位。

加倍

8位非

8位数分别取反即可

8位非

8位或

8位数分别取或即可

8位或

半加器

加法,但是两个单字节相加,输出也只有一个字节,没法完全储存所有可能的结果(因为可能进位溢出),但是也预留了进位寄存器一个字节。这道题可以根据真值表来做,sum位其实就是异或门的真值表,car位就是与门的真值表。

全加器

思路和半加器稍微有点不同,没法直接通过真值表来做,可以从算术的角度去考虑。只有三个输入的情况下,输出只有0,1,2,3。只有2和3的时候才会产生进位,所以利用“成对的麻烦”相同的思路去判断输入为真的数量有没有超过2个即可。而sum位则可以使用“奇数个信号”电路的思路来编写。

全加器

8位加法器

这时候已经有add元件可以用了,那就很简单了,对应位分别相加即可,别忘了在计算高一位的时候要考虑上低一位的进位问题。

8位加法器

(彩虹!(神金))

负数

先学好补码的知识,再来做口算题。

补码

相反数

前面已经学过了补码和负数的知识了,那么其实就很容易想到某个数的相反数其实就是那个数取反后+1。如果这关想不懂,说明补码没学懂。

相反数

1位解码器

一个神奇的元件,由一个元件控制到不同输出。因为有了开关元件,所以这题不是很难,当一路控制为开路的时候另一路控制为闭路即可,一个输入分为两条路,其中一条路要加上非门,这样来保证一条开路一条闭路。

1位解码器

3位解码器

3位输入排列后可以得到8种可能,这时候用开关就不好用了。我选择用排列组合的方式,用与门,将八种情况全部列出来。对于一位输入,分两条路之后,无非就是1和0的区别。根据真值表来选择节点。

3位解码器

逻辑引擎

这个好像没什么好讲的。指令操作码解码的时候,因为只有4个指令,所以只用到四路输出,剩下的不管。另外要注意的是,要用开关控制住其他的运算结果不要和要输出的冲突输出了。

逻辑引擎

⬆︎TOP