計算問題の解き方・16/20
左シフトを使った整数倍の求め方
2進数のレジスタの値を「何ビットか左にシフトし、元の値を足す」操作が何倍になるか、または指定された倍率を作る操作はどれかが問われます。nビット左シフトは2^n倍になることを使い、倍率を2のべき乗の和に分けて考えます。
公開過去問での出題:本試験系 4 回・免除試験 12 回(観測値)
覚える式
- nビット左シフト = 2^n倍(2進数の末尾に0をn個付けるのと同じ)
- 倍率を2のべき乗の和に分ける(例:5 = 4 + 1)
- シフトしてから加算:2^n × x + x / 加算してからシフト:(…)× 2^n
解き方の手順
- 求める倍率、または問題の操作を、xを使った式で表す準備をします。
- 左シフトは1ビットごとに2倍です。nビット左シフトを「× 2^n」に置き換えます。2進数の末尾に0をn個付ける書き方も、nビット左シフトと同じ意味です。
- 操作は書かれている順番どおりに式にします。「シフトしてから加える」と「加えてからシフトする」では値が変わるので、かっこの位置に注意します。
- 式を展開して「□x」の形にし、倍率を読み取ります。
- 選択肢が操作の形で並んでいるときは、1つずつ式に直して展開し、求める倍率と一致するものを選びます。
- 2進数以外でも考え方は同じです。基数rの数を1桁左にずらすとr倍になります(16進数なら1桁で16倍)。
例題
数値を 2 進数で格納するレジスタがある。このレジスタに正の整数 x を設定した後,“レジスタの値を 2 ビット左にシフトして,x を加える”操作を行うと,レジスタの値は x の何倍になるか。ここで,あふれ(オーバフロー)は,発生しないものとする。
ア 3
イ 4
ウ 5
エ 6
出典:平成28年度 春期 基本情報技術者試験 午前 問1(解き方は当サイト作成)
解き方と答えを見る
- 2ビット左シフトは 2^2 = 4倍なので、xは 4x になります。
- そのあとにxを加えるので、4x + x です。
- 4x + x = 5x です。
- したがって、レジスタの値はxの5倍です。
答え:5倍(ウ)
ひっかけ
- シフトしたビット数をそのまま倍率と考え、「2ビットだから2倍」として+xで3倍とする誤りです(例題のア)。nビット左シフトは n倍 ではなく 2^n倍 です。
- シフトだけを計算して、そのあとの「xを加える」を忘れ、4倍とする誤りです(例題のイ)。操作を最後まで式に書き出してから展開します。
- 操作の順番を入れ替える誤りです。例題で先にxを加えてから2ビット左シフトすると(x + x)× 4 = 8x になり、5x とは別の値です。書かれた順にかっこを付けて式を立てます。
- 左シフトと右シフトの取り違えです。左シフトは2^n倍、右シフトは2^nで割る(余りは切り捨て)操作です。向きを確かめてから倍率を当てはめます。
類題(手順を使って解く)
類題 1
「末尾に0を付ける」などの2進数の表記を左シフトとして読み替え、3倍を2のべき乗の和で作れるかが試されます。
非負の2進数 b₁b₂…bₙ を3倍にしたものはどれか。
出典:基本情報技術者試験 科目A免除 修了試験 20180722 実施分 問1(問題文は IPA の公開問題。答えと解説はリンク先)
類題 2
ビット位置の重み(何ビット左にあると何倍か)を使い、上位と下位を入れ替えた値をxの式で表せるかが試されます。
0以上65,536未満の整数xを,16ビットの2進数で表現して,上位8ビットと下位8ビットを入れ替える。得られたビット列を2進数とみなしたとき,その値をxを用いた式で表したものはどれか。ここで,a÷bはaをbで割った商の整数部分を,a%bはaをbで割った余りを表す。また,式の中の数値は10進数である。
出典:基本情報技術者試験 科目A免除 修了試験 20171210 実施分 問2(問題文は IPA の公開問題。答えと解説はリンク先)
類題 3
選択肢の操作を書かれた順にかっこ付きの式へ直し、展開して10倍になるものを選べるかが試されます。
数値を 2 進数で表すレジスタがある。このレジスタに格納されている正の整数 x を 10 倍にする操作はどれか。ここで,桁あふれは起こらないものとする。
出典:平成29年度 秋期 基本情報技術者試験 午前 問1(問題文は IPA の公開問題。答えと解説はリンク先)