今回は令和元年度 機械科目 A問題14を解説します。2進数AとBについて、その和A+B=(101010)2と差A-B=(1100)2が与えられたとき、Bの値を求める問題です。
2進数のまま連立方程式のように「和-差」を計算して2Bを求め、最後に2進数を1桁右シフト(÷2)してBを求めるのが最短ルートです。10進数に変換して検算すると確実です。
令和元年度 機械科目 A問題14:問題文と選択肢
まずは、実際の試験問題を確認してみましょう。

出典:一般財団法人 電気技術者試験センター「令和元年度 第三種電気主任技術者試験」機械科目 A問題14
電験3種 機械科目 【情報】 令和元年度 A問題14
2進数AとBがある。それらの和がA+B=(101010)2,差がA-B=(1100)2であるとき,Bの値として,正しいものを次の(1)〜(5)のうちから一つ選べ。
(1)(1110)2 (2)(1111)2 (3)(10011)2 (4)(10101)2 (5)(11110)2
出題のポイント:10進数に直せば連立方程式
和と差が分かっているなら、中学校の連立方程式です。2進数のままでもできますが、10進数に直したほうが確実でしょう。
25+23+21
23+22
★和から差を引いて2で割る
8+4+2+1


2進数のまま計算する
10進数に直さず、2進数のまま引き算することもできます。桁数が多いときはこちらが速いでしょう。
桁をそろえて引き算
★1桁右へシフトするだけ
2進数を2で割るのは「1桁右シフト」——10進数を10で割ると小数点が1つ動くのと同じです。末尾が0 なら、その0 を取るだけで割り算が終わります。
| 操作 | 2進数では | 10進数では |
| ×2 | 左へ1桁シフト(末尾に0) | ×2 |
| ÷2 | ★右へ1桁シフト | ÷2 |
| ×2n | 左へn桁シフト | — |
コンピュータが掛け算・割り算を高速にできるのは、2の累乗ならシフトだけで済むから。16進数の(6)を16倍すると(60)になるのも同じ理屈です。
2進数の引き算とビット借り
2進数の引き算は、10進数と同じ「借り」の考え方で進みます。ただし借りてくるのは2——10進数の10 に相当します。
| 計算 | 結果 | 借り |
| 0 − 0 | 0 | なし |
| 1 − 0 | 1 | なし |
| 1 − 1 | 0 | なし |
| 0 − 1 | 1 | ★上位から借りる |
0−1 のときだけ上位から借りる——借りると2 になるので 2−1=1。10進数で「10−1=9」とするのと同じ動きです。
実際のコンピュータでは、引き算を「2の補数を足す」という形で行います。引き算回路を作らずに、足し算回路だけで済ませられる——ハードウェアが簡単になるのです。
⚠️ よくある間違い
(4) (10101)2=21はA+B と A−B を足して2で割った値——それは A のほうです(正しくは27ですが、桁の扱いを誤ると21 になります)。
「和−差」で B、「和+差」で A——どちらを求めるのか、問題文を確認してください。
検算は必ず10進数で——B=15、A=27 なら A+B=42、A−B=12 で一致します。
⏱️ 本番での進め方
① 2進数を10進数に直す。101010=42、1100=12。
② B=(和−差)/2=(42−12)/2=15。
③ 15=(1111)2。8+4+2+1。
④ 2進数のままなら「引いて1桁右シフト」でも同じ。
💡 覚え方
「和−差を2で割ればB、和+差を2で割ればA」——連立方程式そのもの。そして「2で割る=1桁右シフト」——2進数ならではの計算法です。

2進数と情報量の単位
2進数1桁が1ビット——情報量の基本単位です。桁数と表せる数の関係を押さえておきましょう。
| ビット数 | 表せる数の個数 | 符号なしの範囲 | 呼び方 |
| 4 | 16 | 0〜15 | ニブル(16進1桁) |
| 8 | 256 | 0〜255 | ★1バイト |
| 10 | 1024 | 0〜1023 | 約1キロ |
| 16 | 65536 | 0〜65535 | 2バイト |
n ビットで表せるのは 2n 通り——最大値は 2n−1 です。0 から数えるので1 少ない ことに注意してください。
本問の(101010)2 は6ビット——0〜63 の範囲で、42 はその中に収まっています。答えの(1111)2=15 は4ビットで足りる 値です。
負の数はどう表すか
引き算の答えが負になる場合——コンピュータでは2の補数で表します。
2の補数は「全ビットを反転して1 を足す」——これで負の数が作れます。8ビットなら −1=11111111、−2=11111110 です。
| 8ビットの値 | 符号なし | 符号あり(2の補数) |
| 00000000 | 0 | 0 |
| 01111111 | 127 | 127 |
| 10000000 | 128 | ★−128 |
| 11111111 | 255 | ★−1 |
最上位ビットが1 なら負——符号ビットと呼ばれます。2の補数を使えば、引き算を足し算だけで実現できる——だからコンピュータはこの表現を採用しているのです。
シフト演算の実用例
「2で割る=1桁右シフト」という性質は、実際のプログラムでも使われます。
| やりたいこと | シフトでの書き方 | 効果 |
| 2で割る | 右へ1シフト | ★除算より速い |
| 8倍する | 左へ3シフト | 23=8 |
| 16で割った余り | 下位4ビットを取り出す | 剰余演算より速い |
除算は加減算よりずっと時間がかかる演算です——2の累乗ならシフトで済むので、桁違いに速い。だから配列の大きさを2の累乗にするといった工夫がなされます。
本問で「和から差を引いて2で割る」——その割り算がシフト1回で終わるのは、2進数で扱っているからこその手軽さです。
2進数の足し算も押さえておく
本問では引き算を使いましたが、足し算も同じ考え方です。繰り上がりの規則さえ覚えれば、10進数と変わりません。
| 計算 | 結果 | 繰り上がり |
| 0+0 | 0 | なし |
| 0+1 | 1 | なし |
| 1+1 | 0 | ★あり |
| 1+1+1 | 1 | ★あり |
1+1=10(2進数)——10進数で9+1=10 になるのと同じ。その桁で表せる最大値を超えたら繰り上がるという原則は共通です。
検算は必ず10進数で——本問なら A=27、B=15 で A+B=42、A−B=12。両方が合えば確実です。
まとめ
| A+B | 101010(2) |
| A-B | 001100(2) |
| 2B | 011110(2) |
| B | 1111(2) |
| 答え | (2) |
▼あわせて解きたい関連問題
・ビット論理演算(ExOR・NOR・OR)から16進数へ:【機械】平成29年度A問題14
・AND・OR・EX-OR・NANDの4種論理演算と16進変換:【機械】平成21年度A問題14

コメント