NAND ๊ฒ์ดํธ์ ์กฐํฉ๋ง์ผ๋ก ๋ชจ๋ ๊ฒ์ดํธ๋ฅผ ๋ง๋ค ์ ์๋ค. ์๋๋ NAND ๊ฒ์ดํธ์ ํผ์ ํธ๋ก ๋ง์ผ๋ก ๋ชจ๋ ๊ฒ์ดํธ๋ฅผ ๊ตฌํํ python ์ฝ๋์ด๋ค.
def NAND(x1, x2):
a0 = -0.5 * (x1 + x2) + 0.7
if a0 > 0:
return 1
else:
return 0
def NOT(x):
return NAND(x, x)
def AND(x1, x2):
return NOT(NAND(x1, x2))
def OR(x1, x2):
return NAND(NOT(x1), NOT(x2))
def NOR(x1, x2):
return NOT(OR(x1, x2))
def XOR(x1, x2):
return AND(NAND(x1, x2), OR(x1, x2))
def XNOR(x1, x2):
return NOT(XOR(x1, x2))
for func in [NAND, AND, OR, NOR, XOR, XNOR]:
print(func.__name__, end=' ')
for x1, x2 in [[0, 0], [0, 1], [1, 0], [1, 1]]:
print(func(x1, x2), end=' ')
print('')
# ์ถ๋ ฅ
NAND 1 1 1 0
AND 0 0 0 1
OR 0 1 1 1
NOR 1 0 0 0
XOR 0 1 1 0
XNOR 1 0 0 1
NOR ๊ฒ์ดํธ๋ ๋ง์ฐฌ๊ฐ์ง๋ค.
def NOR(x1, x2):
a0 = -0.5 * (x1 + x2) + 0.2
if a0 > 0:
return 1
else:
return 0
def NOT(x):
return NOR(x, x)
def OR(x1, x2):
return NOT(NOR(x1, x2))
def AND(x1, x2):
return NOR(NOT(x1), NOT(x2))
def NAND(x1, x2):
return NOT(AND(x1, x2))
def XOR(x1, x2):
return AND(NAND(x1, x2), OR(x1, x2))
def XNOR(x1, x2):
return NOT(XOR(x1, x2))
for func in [NOR, OR, AND, NAND, XOR, XNOR]:
print(func.__name__, end=' ')
for x1, x2 in [[0, 0], [0, 1], [1, 0], [1, 1]]:
print(func(x1, x2), end=' ')
print('')
# ์ถ๋ ฅ
NOR 1 0 0 0
OR 0 1 1 1
AND 0 0 0 1
NAND 1 1 1 0
XOR 0 1 1 0
XNOR 1 0 0 1
NAND ๊ฒ์ดํธ์ NOR ๊ฒ์ดํธ์ ๊ณตํต์ ์ ๋ฌด์์ผ๊น? ๋๋ค ์ ๋ ฅ์ด ๋ชจ๋ 0์ผ ๋ 1์ ์ถ๋ ฅํ๋ฉด์ ์ ๋ ฅ์ด ๋ชจ๋ 1์ผ ๋ 0์ ์ถ๋ ฅํ๋ค. ๊ทธ๋์ NAND(x, x) = NOR(x, x) = NOT(x) ์ด ์ฑ๋ฆฝํ๋ ๊ฒ์ด๋ค. NOT ๊ฒ์ดํธ๋ฅผ ๋ง๋ค ์ ์๊ธฐ ๋๋ฌธ์ NAND ๊ฒ์ดํธ๋ ์๊ธฐ ์์ ์ ๋ถ์ ์ธ AND ๊ฒ์ดํธ, NOR ๊ฒ์ดํธ๋ ์๊ธฐ ์์ ์ ๋ถ์ ์ธ OR ๊ฒ์ดํธ๋ฅผ ๋ง๋ค ์ ์๋ค.