論理演算AND、OR、XOR、NOT

論理演算のAND、OR、XOR、NOTについて説明しています。

又、これらを組み合わせたNANDとNORについても説明しています。

論理演算

 論理演算は、真(true)と偽(false)を元に、結果を求める演算です。

論理演算は、真偽を元に結果を求める演算

 数字では真が1、偽が0で表され、ビット演算(2進数の演算)としても使われます。

 次からは、以下の各論理演算について説明します。

AND(論理積)

 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になります。

【ビット演算のAND】
数字
x 1111
y 1010
結果 1010

 各桁でANDの計算をして、結果を出します。

OR(論理和)

 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になります。

【ビット演算のOR】
数字
x 1111
y 1010
結果 1111

XOR(排他的論理和)

 XOR(排他的論理和)は、2つの真偽が異なれば真となり、それ以外は偽となります。

【XOR(排他的論理和)の真理値表】
数字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になります。

【ビット演算のXOR】
数字
x 1111
y 1010
結果 0101

NOT(否定)

 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の組み合わせです。論理積の結果を否定します。

【NAND(否定論理積)の真理値表】
数字1 数字2 結果
0 0 1
0 1 1
1 0 1
1 1 0

 NANDは、プログラミング言語では!( 式 && 式)等と記載出来ます。これは、式 && 式の結果を否定(真偽逆転)します。

 又、z = ~( x & y)等と表記された場合はビット演算です。符号も含めて逆転する事があります。

NOR(否定論理和)

 NOR(否定論理和)は、ORとNOTの組み合わせです。論理和の結果を否定します。

【NOR(否定論理和)の真理値表】
数字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になるなど、論理演算とビット演算の計算方法は同じということです。

論理演算の計算練習

 以下は、論理演算の練習問題です。練習したい演算子を選択して下さい。計算に使う数字が表示されます。「答え」ボタンをクリックすると、計算結果が表示されて答え合わせが出来ます。

演算子: 

数字1:

数字2:

答え :

 例えば、演算子でANDを選択して数字1が1で数字2が0と表示された場合、1 AND 0を計算します。

 演算子を変更すると、数字がランダムに変更されます。「もう1度」ボタンをクリックすると、同じ演算子で数字が変更されます。

 又、NOTでは数字1しか表示されません。1つの数字で計算するためです。

 尚、NOTやNAND、NORではビットの反転時に符号の逆転は考慮せず、0なら1、1なら0と演算して下さい。

  • このエントリーをはてなブックマークに追加