テーマ:論理回路
先ず、ここで使う数字は0と1の二つだけだ。
B={0,1}
と覚えてもらいたい。
これは一般に、ブール代数と呼ばれるものである。
パソコンから何から、ディジタルの物は全てブール代数の法則に従う。
まぁ、そんな事はどうでもいい。
では、以下の関数を定義する。
NAND(x,y)=z (x,y,z∈B)
上記のように定める。
ここから、少しパズルのようになる。
なぜかと言えば、これから定める全ての関数は、
全てNAND(x,y)を有限回用いる事で作り出せる。
1.NOT
NOT(x)=y (x,y∈B)
NOT(x)=NAND(x,x)
2.AND
AND(x,y)=z (x,y,z∈B)
AND(x,y)=NOT(NAND(x,y))
3.OR
OR(x,y)=z (x,y,z∈B)
OR(x,y)=NAND(NOT(x),NOT(y))
4.NOR
NOR(x,y)=z (x,y,z∈B)
NOR(x,y)=AND(NOT(x),NOT(y))
NOR(x,y)=NOT(OR(x,y))
5.ⅩOR
ⅩOR(x,y)=z (x,y,z∈B)
ⅩOR(x,y)=AND(NAND(x,y),OR(x,y))
どうだろうか。
実に良く出来ているとは思わないだろうか。
これで終わりだと思ったら大間違いだ。
6.PARITY
PARITY(x,y,z)=t (x,y,z,t∈B)
PARITY(x,y,z)=XOR(XOR(x,y),z)
さて、パズルは終わりだ。
次はマジックだろうか。
一応、PARITYを説明しておく。
パリティとは、1が奇数個なら1、偶数個なら0を返す関数である。
このパリティを用いると、データ復元を行うことが出来る。
xのデータが消滅したと仮定しよう。
x=PARITY(y,z,t)
で、元のデータが復元できる。
例を見せよう。
ただし、簡略化する為にXORを用いる。
適当に、100111001101001101
というデータがあったとしよう。
これを三つずつに分ける。
100 111 001 101 001 101
次に、これを三つの紙テープに記録しよう。
仮に、A、B、Cとする。
A={110101}
B={010000}
C={011111}
1.AとBのXORをCに記録する。
2.BとCのXORをAに記録する。
3.CとAのXORをBに記録する。
つまり、
A={110101 001111}
B={010000 101010}
C={011111 100101}
さて、貴方はおっちょこちょいなので、
大事に保管していたはずのCを失くしてしまったとしよう。
つまりは、
A={110101 001111}
B={010000 101010}
C={?????? ??????}
さぁ慌てないで慌てないで。
CとAのXORがBにあるはずだ。
(BとCのXORがAにあるでも良い。)
ここからは、混乱せずにゆっくりと考えてもらいたい。
Aのl(エル)番目をa_l、Bのm番目をb_m、Cのn番目をc_nと置く。
確か、Bの七番目(b_7)がAの一番目(a_1)とCの一番目(c_1)のXORだ。
と言う事は、b_7とa_1のXORはc_1のはずである。
ゆえに、
c_1 = XOR(a_1,b_7) = XOR(1,1) = 0
以下同様にして、
c_2 = XOR(a_2,b_8) = XOR(1,0) = 1
c_3 = XOR(a_3,b_9) = XOR(0,1) = 1
c_4 = XOR(a_4,b_10) = XOR(1,0) = 1
c_5 = XOR(a_5,b_11) = XOR(0,1) = 1
c_6 = XOR(a_6,b_12) = XOR(1,0) = 1
よって、
C={011111 ??????}
となる。
残りの“?”はAとBのXORであるが、元のデータでは無いので求めない。
さて、これで失われたCが復元できた。
すなわち、
A={110101 001111}
B={010000 101010}
C={011111 ??????}
後は、以下の様に並べる。
a_1,b_1,c_1,a_2,b_2・・・b_6,c_6
よって、
100111001101001101
どうだろうか。
少しは暇な時間が潰せただろうか?
だと嬉しいのだが・・・
B={0,1}
と覚えてもらいたい。
これは一般に、ブール代数と呼ばれるものである。
パソコンから何から、ディジタルの物は全てブール代数の法則に従う。
まぁ、そんな事はどうでもいい。
では、以下の関数を定義する。
NAND(x,y)=z (x,y,z∈B)
x | y | z |
0 | 0 | 1 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
ここから、少しパズルのようになる。
なぜかと言えば、これから定める全ての関数は、
全てNAND(x,y)を有限回用いる事で作り出せる。
1.NOT
NOT(x)=y (x,y∈B)
x | y |
0 | 1 |
1 | 0 |
2.AND
AND(x,y)=z (x,y,z∈B)
x | y | z |
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
3.OR
OR(x,y)=z (x,y,z∈B)
x | y | z |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
4.NOR
NOR(x,y)=z (x,y,z∈B)
x | y | z |
0 | 0 | 1 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 0 |
NOR(x,y)=NOT(OR(x,y))
5.ⅩOR
ⅩOR(x,y)=z (x,y,z∈B)
x | y | z |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
どうだろうか。
実に良く出来ているとは思わないだろうか。
これで終わりだと思ったら大間違いだ。
6.PARITY
PARITY(x,y,z)=t (x,y,z,t∈B)
x | y | z | t |
0 | 0 | 0 | 0 |
0 | 0 | 1 | 1 |
0 | 1 | 0 | 1 |
0 | 1 | 1 | 0 |
1 | 0 | 0 | 1 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 0 |
1 | 1 | 1 | 1 |
さて、パズルは終わりだ。
次はマジックだろうか。
一応、PARITYを説明しておく。
パリティとは、1が奇数個なら1、偶数個なら0を返す関数である。
このパリティを用いると、データ復元を行うことが出来る。
xのデータが消滅したと仮定しよう。
x=PARITY(y,z,t)
で、元のデータが復元できる。
例を見せよう。
ただし、簡略化する為にXORを用いる。
適当に、100111001101001101
というデータがあったとしよう。
これを三つずつに分ける。
100 111 001 101 001 101
次に、これを三つの紙テープに記録しよう。
仮に、A、B、Cとする。
A={110101}
B={010000}
C={011111}
1.AとBのXORをCに記録する。
2.BとCのXORをAに記録する。
3.CとAのXORをBに記録する。
つまり、
A={110101 001111}
B={010000 101010}
C={011111 100101}
さて、貴方はおっちょこちょいなので、
大事に保管していたはずのCを失くしてしまったとしよう。
つまりは、
A={110101 001111}
B={010000 101010}
C={?????? ??????}
さぁ慌てないで慌てないで。
CとAのXORがBにあるはずだ。
(BとCのXORがAにあるでも良い。)
ここからは、混乱せずにゆっくりと考えてもらいたい。
Aのl(エル)番目をa_l、Bのm番目をb_m、Cのn番目をc_nと置く。
確か、Bの七番目(b_7)がAの一番目(a_1)とCの一番目(c_1)のXORだ。
と言う事は、b_7とa_1のXORはc_1のはずである。
ゆえに、
c_1 = XOR(a_1,b_7) = XOR(1,1) = 0
以下同様にして、
c_2 = XOR(a_2,b_8) = XOR(1,0) = 1
c_3 = XOR(a_3,b_9) = XOR(0,1) = 1
c_4 = XOR(a_4,b_10) = XOR(1,0) = 1
c_5 = XOR(a_5,b_11) = XOR(0,1) = 1
c_6 = XOR(a_6,b_12) = XOR(1,0) = 1
よって、
C={011111 ??????}
となる。
残りの“?”はAとBのXORであるが、元のデータでは無いので求めない。
さて、これで失われたCが復元できた。
すなわち、
A={110101 001111}
B={010000 101010}
C={011111 ??????}
後は、以下の様に並べる。
a_1,b_1,c_1,a_2,b_2・・・b_6,c_6
よって、
100111001101001101
どうだろうか。
少しは暇な時間が潰せただろうか?
だと嬉しいのだが・・・
以上