情報25【電験3種 機械】2進数の和と差からBの値を求める連立方程式!令和元年度 A問題14 完全解説

電験3種 機械科目 情報 令和元年度 A問題14 2進数の和と差が手がかり!Bの値を突き止める

今回は令和元年度 機械科目 A問題14を解説します。2進数AとBについて、その和A+B=(101010)2と差A-B=(1100)2が与えられたとき、Bの値を求める問題です。

2進数のまま連立方程式のように「和-差」を計算して2Bを求め、最後に2進数を1桁右シフト(÷2)してBを求めるのが最短ルートです。10進数に変換して検算すると確実です。

目次

令和元年度 機械科目 A問題14:問題文と選択肢

まずは、実際の試験問題を確認してみましょう。

電験3種 機械科目 情報 令和元年度 A問題14 問題文
令和元年度 機械科目 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進数に直したほうが確実でしょう。

\( (101010)_2=32+8+2=42 \)
和を10進数に
25+23+21
\( (1100)_2=8+4=12 \)
差を10進数に
23+22
\( B=\dfrac{(A+B)-(A-B)}{2}=\dfrac{42-12}{2}=15 \)
B を求める
★和から差を引いて2で割る
\( 15=(1111)_2 \)
2進数に戻す
8+4+2+1
2進数AプラスBからAマイナスBを引いて2Bを求め1桁右シフトでBを得る手順図
和-差=2Bを利用し、6桁で引き算した(011110)₂を1桁右へシフトします。
Bを15と求めAを27と確認し2進数の和101010と差001100が一致することを示す解答図
A=(11011)₂、B=(1111)₂を代入すると元の和と差に一致し、正解は(2)です。
答え正解は (2) (1111)2です。A=(42+12)/2=27=(11011)2——A+B=42、A−B=12 で確かめられます

2進数のまま計算する

10進数に直さず、2進数のまま引き算することもできます。桁数が多いときはこちらが速いでしょう。

\( 2B=(101010)_2-(001100)_2=(011110)_2 \)
和から差を引く
桁をそろえて引き算
\( B=(011110)_2\div2=(1111)_2 \)
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 − 00なし
1 − 01なし
1 − 10なし
0 − 11★上位から借りる

0−1 のときだけ上位から借りる——借りると2 になるので 2−1=110進数で「10−1=9」とするのと同じ動きです。

実際のコンピュータでは、引き算を「2の補数を足す」という形で行います。引き算回路を作らずに、足し算回路だけで済ませられる——ハードウェアが簡単になるのです。

⚠️ よくある間違い
(4) (10101)2=21A+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進数ならではの計算法です。

101010から001100を引く6桁の筆算と右シフトおよび各ビット列の10進変換表
(011110)₂は30で、右シフトした(001111)₂は15です。

2進数と情報量の単位

2進数1桁が1ビット——情報量の基本単位です。桁数と表せる数の関係を押さえておきましょう。

ビット数表せる数の個数符号なしの範囲呼び方
4160〜15ニブル(16進1桁)
82560〜255★1バイト
1010240〜1023約1キロ
16655360〜655352バイト

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の補数)
0000000000
01111111127127
10000000128★−128
11111111255★−1

最上位ビットが1 なら負——符号ビットと呼ばれます。2の補数を使えば、引き算を足し算だけで実現できる——だからコンピュータはこの表現を採用しているのです。

シフト演算の実用例

「2で割る=1桁右シフト」という性質は、実際のプログラムでも使われます

やりたいことシフトでの書き方効果
2で割る右へ1シフト★除算より速い
8倍する左へ3シフト23=8
16で割った余り下位4ビットを取り出す剰余演算より速い

除算は加減算よりずっと時間がかかる演算です——2の累乗ならシフトで済むので、桁違いに速いだから配列の大きさを2の累乗にするといった工夫がなされます。

本問で「和から差を引いて2で割る」——その割り算がシフト1回で終わるのは、2進数で扱っているからこその手軽さです。

2進数の足し算も押さえておく

本問では引き算を使いましたが、足し算も同じ考え方です。繰り上がりの規則さえ覚えれば、10進数と変わりません

計算結果繰り上がり
0+00なし
0+11なし
1+10★あり
1+1+11★あり

1+1=10(2進数)——10進数で9+1=10 になるのと同じその桁で表せる最大値を超えたら繰り上がるという原則は共通です。

検算は必ず10進数で——本問なら A=27、B=15 で A+B=42、A−B=12両方が合えば確実です。

まとめ

A+B101010(2)
A-B001100(2)
2B011110(2)
B1111(2)
答え(2)

▼あわせて解きたい関連問題
・ビット論理演算(ExOR・NOR・OR)から16進数へ:【機械】平成29年度A問題14
・AND・OR・EX-OR・NANDの4種論理演算と16進変換:【機械】平成21年度A問題14

📚 次に解くべき関連問題
【機械】平成29年度A問題14(情報24)
【機械】平成21年度A問題14(情報26)
【機械】令和6年度上期B問題18(情報27)
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次