(3)非门
非门电路又叫“否”运算,也称求“反”运算,因此非门电路又称为反相器。下面是由MOS管组成的电路图。非门只有一个输入A,Q作为输出。
例如A输入低电平,那么Q就会输出高电平,转换为二进制就是A输入0,那么Q就会输出1;反之A输入1,Q就会得到0。
对应的Java语言运算表达式为!0=1;!1=0。
(4)异或门
异或门电路是判断两个输入是否相同,“异或”代表不同则结果为真。即两个输入电平不同时得到高电平,如果输入电平相同,则得到低电平。
下面是由MOS管组成的电路图。A和B作为输入,Out作为输出。
例如A输入低电平、B输入高电平,那么Out输出高电平,转换为二进制就是A输入0,B输出1,那么Out就会输出1。
对应的Java语言运算表达式为0^1=1。
2.3.从门电路到半加器
通过门电路,我们可以进行Java语言中逻辑运算了,但是加减乘除等算数运算仍然无法完成,这时需要更复杂的电路单元了。
由基本门电路组成的各种逻辑单元电路登场,假如我们要实现一个最简单的加法运算,计算二进制数1 1 等于几。
我们这时候可以使用半加器实现。
半加器和全加器是算术运算电路中的基本单元,它们是完成1位二进制相加的一种组合逻辑电路,这里的1位就是我们经常说的“1byte=8bit”里的1bit,即如果我们想完成8位二进制的运算就需要8个全加器 。
半加器这种加法没有考虑低位来的进位,所以称为半加。
下图就是一个半加器电路图。
半加器由与门和异或门电路组成,“=1”所在方框是异或门电路符号,“&”所在方框是与门电路符号。
这里面A和B作为输入端,因为没有考虑低位来的进位,所以输入端A和B分别代表两个加数。输出端是S和C0,S是结果,C0是进位。
比如当A=1,B=0的时候,进位C0=0,S=1,即1 0=1。
当A=1,B=1的时候,进位C0=1,S=0,即1 1=10。这个10就是二进制,换成十进制就是用2来表示了,即1 1=2。
到了这里,你应该明白了晶体管怎么计算1 1=2了吧。
然后我们利用这些,再组成全加器。下面是一个全加器电路图,同样只支持1bit计算。
Ai和Bi是两个加数,Ci-1是低位进位数,Si是结果,Ci是高位进位数。