AND OR XOR NOT  

論理演算(ビット演算の代表格)の英字記号
  代表的な4通りの約束を覚えましょう

排他的論理和(はいたてきろんりわ)なんて云うよりも XOR の方がきれいですm(^_^)。
従って、英字でやっていきましょう。小文字 and or xor not を使ってもかまいません。
  論理演算(ビット演算)の定義=約束ごと。真理値表で示しました。
AND アンド 
A B A and B
0 0 0
0 1 0
1 0 0
1 1 1

OR オア 
A B A or B
0 0 0
0 1 1
1 0 1
1 1 1

XOR エクスクルーシブオア 
A B A xor B
0 0 0
0 1 1
1 0 1
1 1 0

NOT ノット 
A not A
0 1
1 0
 
起こりうるすべての場合について、その結果を分かりやすく表にしたものを真理値表といいます。
2進数のビット演算ですから、0、1しか扱いません。
ただし、次のように置き換えることが可能です。
0⇒F(偽False)、 1⇒T(真True) とか
0⇒OFF 、 1⇒ON などです。

AND 論理積 演算子は∧&× ・などを使う。
A, Bともに1のときのみ1を返します。

OR 論理和 演算子は∨��+など。
A, Bの少なくとも一方が1のとき1を返します。

XOR 排他的論理和 記号はなど
A, Bのどちらか一方だけが1のとき1を返します。

NOT 否定
 演算子記号は ¬ ~  など。
単一の処理で逆(反対)を返します。

対応するビットごとの演算規則(きそく)です。
たし算、かけ算などに似ていますが何か違いますネ。

ビット演算をやってみましょう。いくつか例をあげました。

例 � �A = 0101, B = 1001のとき
A and B = 0001
A or B = 1101
A xor B= 1100
例 �� A = 0000 0101, B = 1111 1001 のとき
A and B  A or B  A xor B を求めて見よう。
例 �� A = 5 , B = −7 のとき
A and B = 1
A or B = −3
A xor B = −4  となりますよ。


� (�かりやすく簡単に4ビットの大きさで、ビット演算をやってみました。
確かめてくださいm(^_^)。

�◆〆E戮錬献咼奪函壁箙翩佞�)の範囲でみましょう。
(最上位が符号ビット)
 A and B = 0000 0001
 A or B   = 1111 1101
 A xor B = 1111 1100 となります。

�� 今度は10進数です。2進数に直してから、ビット演算をしますよ。すると、ここは、上の�△箸泙辰燭�同じ説明になります。
実は�,盧脳絨魅咼奪函複乾咼奪般棔砲鯢箙罐咼奪箸塙佑┐襪函∩管瑤海海汎韻犬覆鵑任好諭�

役に立つ特別なビット演算をとりあげました

AND 例
 上4ビット 下4ビット  16進
 A   0010 1011 → 2 B 
 B    0000 1111 → 0 F 
--------------------
AND 0000 1011 → 0 B (16)
 上4ビットを消し、下4ビットを残す。
 特定のビットをOFF(消去)することが出来ます。

 
 OR 例
 A  0010 1011 → 2 B
 B    0000 1111 → 0 F
------------------
OR  0010 1111 → 2 F (16)
 上ビットはそのままで、下ビットはすべてON。
 特定のビットをON(立てる)に出来ます。


 
  XOR 例
  A     0010 1011 →  2 B
  B     0000 1111 →  0 F
    -----------------
XOR  0010 0100 →  2 4 (16)
 
 上4ビットはそのままで、下4ビットは否定。
 1部分だけ否定することが出来ます。
 
以上 8ビットを例にした論理演算を調べてみました。
B=0000 1111=0F(16)は変えていません 。
使い方がいろいろあるものです。
単にクールに not((A or B) xor C)
はいくら? なんて自作自演も楽しいかと。

知っていて損はないド・モルガンの法則(ほうそく)

次の2つの論理式をいいます。有名です。

=

記号を変えて、 = +  と同じ
A B A・B +
0 0 0 1 1 1 1
0 1 0 1 1 0 1
1 0 0 1 0 1 1
1 1 1 0 0 0 0

=
記号を変えて = ・と同じ
A B A+B ・
0 0 0 1 1 1 1
0 1 1 0 1 0 0
1 0 1 0 0 1 0
1 1 1 0 0 0 0
それぞれの真理値表で、黄色の部分が一致(同じ)しているのがわかります。

NAND NOR 

ときたま出てくる大事な論理演算



NAND (NOT AND)
否定論理積
A B A nand B
0 0 1
0 1 1
1 0 1
1 1 0
 
NOR (NOT OR)
否定論理和
A B A nor B
0 0 1
0 1 0
1 0 0
1 1 0
NAND(NOT AND)は、ANDの結果を否定(NOT)したもの で、否定論理積(かんたんに否定積)といいます。
表から分かる通り、1番目A、2番目B ともに 1の場合に0、それ以外の場合には 1 を返してきます。
 AND の結果を否定(NOT)していることを、確かめてください。

 NOR(NOT OR)は、ORの結果を否定(NOT)したもので、否定論理和といいます。
1番目A、2番目B ともに 0の場合に 1、それ以外の場合には 0 を返してきます。 OR の結果を否定(NOT)していることを、確かめてください。

3つ以上の XOR



左表で、a  b  c は 0 か 1 です。
  (a XOR b) XOR c = a XOR ( b XOR c)
だから、これを単に
 a XOR b XOR c  (つまり a b c)
と書いています。
 表を見ると、a b c のうち、1 が1個と 3個のときのみ 結果が 1 になっています。
一般に、幾つもの XOR を続けるとき、
   1 が奇数個あるとき 1
   1 が偶数個あるとき 0

 と云う結果になります。どのビットかは問わないが、個数が偶数(ぐうすう)か奇数(きすう)か調べることが出来ます。
集合図の XOR はきれいなので描いてみました。
何とこれが「 3山くずし」の必勝パターンと大いに関係があるというのです。

前ページの答えです

まず情報処理試験の問題から
16進を2進数で表して見て、最左端が、0は正の数、1は負の数であるから
ア 1FFF→0001 1111 1111 1111 正の数で、10進では213 −1
イ DFFF→1101 1111 1111 1111  負の数で、全ビット反転+1 で0010 0000 0000 0001
 であるから、10進では −(213 +1)
ウ E000→1110 0000 0000 0000  負の数で、全ビット反転+1で 0010 0000 0000 0000
 これで10進では −213
エ FFFF→1111 1111 1111 1111  負の数で、全ビット反転+1で 0000 0000 0000 0001
 であるから、10進では −1
 

次にこれらを4倍する、つまり 22を掛けると
ア 22(213 −1) = 215 − 22
イ  −22(213 + 1)= −215 −4
ウ 明らかに −215
エ 明らかに −4

16ビットの符号付き2進数の範囲は前述の −215  から  215 −1 まで
ここからはみ出しているのは「イ」。
ここでは、算術シフトを用いなかったが、「4倍する」=「2ビット左シフト」でやった方が
もっと分かりやすく、あふれの判定もスムーズです。

その他の問題の答え

(1) 1100 1110  
(2) 20は 0001 0100(2)
    −50は 1100 1110(2)
 これを足して 1110 0010  符号付
1110 0010(2)
は当然 −30(10)ですよ。確かめてください。
(3) −91 負数ですよ
(4) 0101 1011
   1の補数は 0101 1010
 
(5) 5934(10)     652(16) ここでは負数を頭の外へ
(6) yes コンピュータに問うてみましたネ(`ω´)

ホントの情報処理試験の問題です

(1) 最上位をパリティビットとする8ビット符号において,パリティビット以外の下位7ビットを得るためのビット演算はどれか。
 ア 16 進数 0F との AND をとる。
 イ 16 進数 0F との OR をとる。
 ウ 16 進数 7F との AND をとる。
 エ 16 進数 FF との XOR (排他的論理和)をとる。

 平成15年の出題(そのまま)です。パリティビットは特殊な役目をするビットですが、その意味が分からなくても答えられます。  0F(16)=0000 1111(2) ですよ。  【答 ウ】

(2)  8ビットで表される符号なし2進数 x が 16 の倍数であるかどうかを調べる方法として,適切なものはどれか。
 ア  x と2進数 00001111 のビットごとの論理積をとった結果が0である。
 イ  x と2進数 00001111 のビットごとの論理和をとった結果が0である。
 ウ  x と2進数 11110000 のビットごとの論理積をとった結果が0である。
 エ  x と2進数 11110000 のビットごとの論理和をとった結果が0である。
        平成18年の出題(そのまま)。
  答えは 【ア】  です。

(3)8ビットのデータの下位2ビットを変化させずに,上位6ビットのすべてを反転させる論理演算はどれか。
 ア 16 進数 03 と排他的論理和をとる。
 イ 16 進数 03 と論理和をとる。
 ウ 16 進数 FC と排他的論理和をとる。
 エ 16 進数 FC と論理和をとる。
16年の出題(そのまま)です。
ビットの反転(はんてん)とは、
0は1に、1は0に変えることですね。

【答 ウ】

いつものことながら問題です


問 8ビットで左端のビットは符号ビットです。
次の10進数の演算結果はいくらでしょう。

1.( 50 OR 100 ) XOR (- 100)
2.50 AND ( 100 XOR (-100) )   
意味はありませんから、こんなん出来てどうしたネン?と云う方は止めときましょう m(^〇^)m
注 ( )を先に計算します。
答えは次回ですが、次の JavaScript で作ったカンタン計算機で確かめ出来ますよ。

「遊び」です。JavaScript(設定を有効にすること)にて、AND OR XOR NOT を計算します。自分の計算結果を確かめるときなど利用してください。