今回は平成21年度 機械科目 A問題14を解説します。2進数A=(1100 0011)2,B=(1010 0101)2について、論理積(AND)・論理和(OR)・排他的論理和(EX-OR)・否定的論理積(NAND)という4種類のビット演算を行い、それぞれを16進数で表す穴埋め問題です。
情報24と同系統のビット論理演算問題ですが、扱う演算がAND/OR/EX-OR/NANDの4種であり、4つの空欄すべてに数値が入る形式です。各ビット桁を丁寧に演算してから4桁ごとに16進数へ変換します。
平成21年度 機械科目 A問題14:問題文と選択肢
まずは、実際の試験問題を確認してみましょう。

出典:一般財団法人 電気技術者試験センター「平成21年度 第三種電気主任技術者試験」機械科目 A問題14
電験3種 機械科目 【情報】 平成21年度 A問題14
2進数A,Bが,A=(1100 0011)2,B=(1010 0101)2であるとき,AとBのビットごとの論理演算を考える。AとBの論理積(AND)を16進数で表すと(ア),AとBの論理和(OR)を16進数で表すと(イ),AとBの排他的論理和(EX-OR)を16進数で表すと(ウ),AとBの否定的論理積(NAND)を16進数で表すと(エ)となる。
上記の記述中の空白箇所(ア),(イ),(ウ)及び(エ)に当てはまる数値として,正しいものを組み合わせたのは次のうちどれか。
(ア) (イ) (ウ) (エ) (1) (81)16 (E7)16 (66)16 (18)16 (2) (81)16 (E7)16 (66)16 (7E)16 (3) (81)16 (E7)16 (99)16 (18)16 (4) (E7)16 (81)16 (66)16 (7E)16 (5) (E7)16 (81)16 (99)16 (18)16
出題のポイント:4種類を桁ごとに処理する
8桁の2進数どうしで4種類の演算——桁をそろえて縦に並べるのが確実です。A=11000011、B=10100101 を書き出しましょう。
| 演算 | 結果(2進数) | 16進数 | 1 になる条件 |
| AND | 10000001 | 81 | 両方1 |
| OR | 11100111 | E7 | どちらか1 |
| EX-OR | 01100110 | 66 | ★異なる |
| NAND | 01111110 | ★7E | AND の否定 |
NAND は AND の全ビット反転——10000001 を反転すれば01111110。改めて計算し直す必要はありません。
1000=8、0001=1
★0111=7、1110=E


⚠️ よくある間違い
(エ)を18 としている選択肢は4桁ずつの並びを逆にしたもの——01111110 は「7」「E」の順で、「1」「8」ではありません。
(ウ)を99 としている選択肢はEX-OR とEX-NOR を取り違えたもの。01100110(66)の反転が10011001(99)——「異なるとき1」か「一致するとき1」かを確認してください。
(ア)(イ)を入れ替えた選択肢もあります。AND は1 が少なく、OR は1 が多い——81 と E7 なら、E7 のほうが1 が多いのでOR だと判断できます。
演算どうしの関係を使って検算する
4つの結果には、互いに関係があります。それを使えば計算が正しいか確かめられるのです。
| 関係 | 式 | 本問での確認 |
| NAND は AND の否定 | NAND=(AND)‾ | 81+7E=FF |
| AND と OR と EX-OR | ★OR=AND+EX-OR | 81+66=E7 |
| 全ビット | AND と NAND を足すと全部1 | FF=11111111 |
「OR=AND+EX-OR」という関係が便利です。OR は「どちらか1」、AND は「両方1」、EX-OR は「一方だけ1」——「どちらか1」=「両方1」+「一方だけ1」 だからです。
本問なら 81+66=E7——16進数の足し算で確かめられます。8+6=E、1+6=7 で桁上がりもなく一致します。
3つのうち2つ計算すれば、残り1つは検算に使える——時間があれば必ず確かめてください。
8桁2進数の扱いに慣れる
8桁=1バイト——16進数なら2桁で表せます。上位4桁と下位4桁に分けて考えるのが基本です。
| 2進数(8桁) | 上位4桁 | 下位4桁 | 16進数 |
| 11000011(A) | 1100=C | 0011=3 | C3 |
| 10100101(B) | 1010=A | 0101=5 | A5 |
問題文が「1100 0011」と4桁ずつ区切って書いているのは、16進数への変換を意識させるためです。区切りに従って読めば、変換は機械的に進みます。
A=C3、B=A5 と16進数で書いてから演算するという手もありますが、ビット演算は2進数のまま行うほうが確実——16進数のまま論理演算はできません。
⏱️ 本番での進め方
① A と B を桁をそろえて縦に並べる。
② AND→OR→EX-OR の順に計算。NAND はAND の反転。
③ 4桁ずつ区切って16進数へ。0111=7、1110=E。
④★検算:OR=AND+EX-OR、AND+NAND=FF。
💡 覚え方
「NAND はAND を反転するだけ」——計算し直さない。そして「OR=AND+EX-OR」——3つの関係を使えば検算できます。

ビット演算の真理値表を作っておく
4種類の演算を、1つの表にまとめて覚えておくと速くなります。2入力の組合せは4通りだけです。
| A | B | AND | OR | EX-OR | NAND |
| 0 | 0 | 0 | 0 | 0 | 1 |
| 0 | 1 | 0 | 1 | ★1 | 1 |
| 1 | 0 | 0 | 1 | ★1 | 1 |
| 1 | 1 | 1 | 1 | 0 | ★0 |
EX-OR は真ん中の2行だけが1——「入力が違う」ときです。NAND は最後の1行だけが0——「両方1」のときだけになります。
この表を頭に入れておけば、8桁でも機械的に処理できます——桁ごとに表を引くだけだからです。
16進数への変換で間違えないコツ
8桁の2進数を16進数にするとき、区切りを間違えないこと——必ず4桁ずつ、上位と下位に分けるのが手順です。
本問のNAND=01111110 なら、0111 と1110。0111=4+2+1=7、1110=8+4+2=14=E——よって7E です。
「1110」と「0111」を混同するのが最も多い誤りです。左が上位、右が下位——読む向きを間違えると18 になってしまいます。
2進数8桁を扱う感覚
8桁の2進数=1バイト——0〜255 の256通りを表せます。16進数なら2桁で書けるので扱いやすくなります。
| 2進数 | 16進数 | 10進数 | 特徴 |
| 00000000 | 00 | 0 | 全部0 |
| 11111111 | FF | 255 | ★全部1 |
| 10000000 | 80 | 128 | 最上位だけ1 |
| 01111111 | 7F | 127 | 最上位以外1 |
FF=255 は覚えておくと便利——本問でも AND+NAND=FF という検算に使えました。
80 と7F が隣り合っているのも押さえどころ。符号付きで扱えば、この境目で正負が入れ替わる——127 の次が−128 になります。
まとめ
| (ア) AND | (81)16 |
| (イ) OR | (E7)16 |
| (ウ) EX-OR | (66)16 |
| (エ) NAND | (7E)16 |
| 答え | (2) |
▼あわせて解きたい関連問題
・ビット論理演算(ExOR・NOR・OR)から16進数へ:【機械】平成29年度A問題14
・2進数の和と差からBの値を求める連立方程式:【機械】令和元年度A問題14

コメント