論理演算AND、OR、XOR、NOT
論理演算のAND、OR、XOR、NOTについて説明しています。
又、これらを組み合わせたNANDとNORについても説明しています。
論理演算
論理演算は、真(true)と偽(false)を元に、結果を求める演算です。

数字では真が1、偽が0で表され、ビット演算(2進数の演算)としても使われます。
次からは、以下の各論理演算について説明します。
AND(論理積)
AND(論理積)は、どちらも真の時だけ真となり、それ以外では偽となります。
数字1 | 数字2 | 結果 |
---|---|---|
1 | 1 | 1 |
1 | 0 | 0 |
0 | 1 | 0 |
0 | 0 | 0 |
プログラミング言語では、式 && 式等と記載されます。これは、2つの式(x == 1等)が共に正しい時に真となり、真の時だけ処理を行ったり出来ます。例えば、(x == 1) && (y == 2)と記述した場合、xが1且つyが2の時だけ真になります。
又、z = x & y等と記述された場合はビット演算です。例えば、xとyが1の場合はzが1になります。xが1111、yが1010の時は、zは1010になります。
項 | 数字 |
---|---|
x | 1111 |
y | 1010 |
結果 | 1010 |
各桁でANDの計算をして、結果を出します。
OR(論理和)
OR(論理和)は、どちらかが真であれば真となり、それ以外は偽となります。
数字1 | 数字2 | 結果 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
プログラミング言語では、式 || 式等と記載されます。これは、2つの式のどちらかが正しい時に真となります。例えば、(x == 1) || (y == 2)と記述した場合、xが1またはyが2の時に真になります。
又、z = x | y等と表記された場合はビット演算です。例えば、xとyが1の場合はzが1になります。xが1111、yが1010の時は、zは1111になります。
項 | 数字 |
---|---|
x | 1111 |
y | 1010 |
結果 | 1111 |
XOR(排他的論理和)
XOR(排他的論理和)は、2つの真偽が異なれば真となり、それ以外は偽となります。
数字1 | 数字2 | 結果 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
プログラミング言語では、ビット演算でz = x ^ y等と表記されます。例えば、xとyが1の場合はzが0になります。xが1111、yが1010の時は、zは0101になります。
項 | 数字 |
---|---|
x | 1111 |
y | 1010 |
結果 | 0101 |
NOT(否定)
NOT(否定)は、真は偽に、偽は真が結果になります。つまり、真偽を逆転させます。
数字1 | 結果 |
---|---|
0 | 1 |
1 | 0 |
プログラミング言語では、!式等と記載されます。これは、式が正しくない時に真となります。
又、z = ~x等と表記された場合はビット演算です。符号も含めてビットが逆転する事があり、その場合はxが1の時でもzは0になりません。
- 【ビット演算NOTの例】
- 32ビット演算の場合、xとNOTのzは32桁の数字として扱われます。
x = 0000000000000000000000000000001
z = 1111111111111111111111111111110
一番左の1は負を示し、全て1だと10進数で-1になります。数が減る程、マイナスが大きくなります。このため、上記zを10進数で表示すると、-2になります。
NAND(否定論理積)
NAND(否定論理積)は、ANDとNOTの組み合わせです。論理積の結果を否定します。
数字1 | 数字2 | 結果 |
---|---|---|
0 | 0 | 1 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
NANDは、プログラミング言語では!( 式 && 式)等と記載出来ます。これは、式 && 式の結果を否定(真偽逆転)します。
又、z = ~( x & y)等と表記された場合はビット演算です。符号も含めて逆転する事があります。
NOR(否定論理和)
NOR(否定論理和)は、ORとNOTの組み合わせです。論理和の結果を否定します。
数字1 | 数字2 | 結果 |
---|---|---|
0 | 0 | 1 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 0 |
NORは、プログラミング言語では!( 式 || 式)等と記載出来ます。これは、式 || 式の結果を否定(真偽逆転)します。
又、z = ~( x | y)等と表記された場合はビット演算です。
論理演算とビット演算の違い
論理演算とビット演算の違いは、以下のとおりです。
- ・論理演算
- 元の式の真偽から、ANDなどの指定に基づいて真偽を算出します。
- ・ビット演算
- 元の2進数(数字)から、計算によって数字を算出します。
つまり、真偽を求めるのが論理演算、数字を求めるのがビット演算です。
論理演算で真偽を1と0で表せば、ANDであれば2つの数字が1であれば結果は1になるなど、論理演算とビット演算の計算方法は同じということです。
論理演算の計算練習
以下は、論理演算の練習問題です。練習したい演算子を選択して下さい。計算に使う数字が表示されます。「答え」ボタンをクリックすると、計算結果が表示されて答え合わせが出来ます。
例えば、演算子でANDを選択して数字1が1で数字2が0と表示された場合、1 AND 0を計算します。
演算子を変更すると、数字がランダムに変更されます。「もう1度」ボタンをクリックすると、同じ演算子で数字が変更されます。
又、NOTでは数字1しか表示されません。1つの数字で計算するためです。
尚、NOTやNAND、NORではビットの反転時に符号の逆転は考慮せず、0なら1、1なら0と演算して下さい。