まず、XORの論理式を考える。XORは、入力Aと入力Bが異なるときに1を出力する。つまり、
XOR(A,B)=(A∧¬B)∨(¬A∧B) ここで、NANDゲートのみで表現するために、以下の論理法則を利用する。
* ¬A=A NAND A (NOTゲートのNANDによる表現) * A∧B=¬(A NAND B) (ANDゲートのNANDによる表現) * A∨B=(¬A) NAND (¬B) (ORゲートのNANDによる表現、ド・モルガンの法則) XORの式をNANDで表現するために、上記の法則を適用していく。
XOR(A,B)=(A∧¬B)∨(¬A∧B) まず、¬Aと¬BをNANDで表現する。 ¬A=A NAND A ¬B=B NAND B 次に、A∧¬Bと¬A∧BをNANDで表現する。 A∧¬B=¬(A NAND ¬B) ¬A∧B=¬(¬A NAND B) 上記の式をXORの式に代入する。
XOR(A,B)=¬(A NAND ¬B)∨¬(¬A NAND B) さらにORをNANDで表現する。
XOR(A,B)=¬(¬¬(A NAND ¬B) NAND ¬¬(¬A NAND B)) XOR(A,B)=¬((A NAND ¬B) NAND (¬A NAND B)) ¬B=B NAND B、¬A=A NAND Aを代入 XOR(A,B)=¬((A NAND (B NAND B)) NAND ((A NAND A) NAND B)) 最後に、全体のNOTをNANDで表現する。
XOR(A,B)=((A NAND (B NAND B)) NAND ((A NAND A) NAND B)) NAND ((A NAND (B NAND B)) NAND ((A NAND A) NAND B)) 整理すると、以下のようになる。