| |
|
![]() |
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 オア
代表的な4通りの約束を覚えましょう
従って、英字でやっていきましょう。小文字 and or xor not を使ってもかまいません。
論理演算(ビット演算)の定義=約束ごと。真理値表で示しました。
AND アンド
| A | B | A and B |
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
| 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(消去)することが出来ます。 |
| A 0010
1011 → 2 B B 0000 1111 → 0 F ------------------ OR 0010 1111 → 2 F (16) 上ビットはそのままで、下ビットはすべてON。 特定のビットをON(立てる)に出来ます。 |
| A 0010 1011 → 2 B B 0000 1111 → 0 F ----------------- XOR 0010 0100 → 2 4 (16) 上4ビットはそのままで、下4ビットは否定。 1部分だけ否定することが出来ます。 |
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 |
表から分かる通り、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
と書いています。
表を見ると、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ビット左シフト」でやった方が
もっと分かりやすく、あふれの判定もスムーズです。
その他の問題の答え
ア 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に変えることですね。
【答 ウ】いつものことながら問題です
16進を2進数で表して見て、最左端が、0は正の数、1は負の数であるから
であるから、10進では −(213 +1)
これで10進では −213
であるから、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 を計算します。自分の計算結果を確かめるときなど利用してください。
次の10進数の演算結果はいくらでしょう。
1.( 50 OR 100 ) XOR (- 100)
2.50 AND ( 100 XOR (-100) )
意味はありませんから、こんなん出来てどうしたネン?と云う方は止めときましょう m(^〇^)m
注 ( )を先に計算します。
答えは次回ですが、次の JavaScript で作ったカンタン計算機で確かめ出来ますよ。

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

