0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AND、OR、XORを計算で求める

Last updated at Posted at 2024-09-28

$x=$1と $y=$1 のAND演算は$xy=$1から 1
と求まります。ところが、OR演算は1$+$1$=$1
です。これは直感に反する。

そこで、OR$=x+y-xy$とすると、うまくいきます。

ちなみに、XOR$=x+y-$2$xy$という数式になります。

$z=x+y-$2$xy$は$xyz$空間における曲面を表します。

Screenshot from 2024-10-24 19-53-03.png

$x,y$に1か0を代入するとAND、NAND、OR、NOR、XOR、XNOR演算の結果を返すPythonプログラムを作ってみました。

import tkinter

root = tkinter.Tk()
root.title("NANDGAME")
root.minsize(800, 450)
top = tkinter.Label(root, text="\nNANDGAME\n", font=("メイリオ", 16, "bold"))
top.pack()
top = tkinter.Label(root, text="1か0を入力してください", font=("メイリオ", 12, "bold"))
top.pack()

e1 = tkinter.Entry(root)
e1.pack()
e2 = tkinter.Entry(root)
e2.pack()
button = tkinter.Button(root, text="1か0を入力")
button.pack()


def nandgame():
    x = int(e1.get())
    y = int(e2.get())
    display = "AND=" + str(x*y) + "です\n""NAND=" + str(1-x*y) + "です\n""OR=" + str(x+y-x*y) + "です\n""NOR=" + str(1-x-y+x*y) + "です\n""XOR=" + str(x+y-2*x*y) + "です\n""XNOR=" + str(1-x-y+2*x*y) + "です\n"
    top["text"] = display



button["command"] = nandgame
root.mainloop()

Screenshot from 2024-09-29 20-16-29.png

C++版
https://github.com/biohack5079/nandgame/blob/main/nandgame.exe
CGI版(Python)
http://kabuka.s1007.xrea.com/nand/

純代数なフリをして、AND関数にもOR関数にも$xy$という非線形な項が実は隠されています。

このあたりの深い論理は数学的にかなり難しい論理になって来ます。

それについて考察している記事があったので紹介しておきます。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?