基本情報技術者試験的な備忘録  2017年(平成29年) 春午前 問5 アルゴリズム

20230514基本情報技術者試験的な備忘録  2017年(平成29年) 春午前 問5 アルゴリズム

 

アルゴリズム素人です。
基本情報技術者試験素人です。
以下違いだらけです。自分用メモ。(本格的な解説ではありません。)

参考問題:
基本情報技術者試験 午後 2017年(平成29年) 春午前 問5 アルゴリズム
問題の画像は、IPA様、過去問道場様より引用しました。
(問題あれば削除いたします。)





この問題の答えは、「ア」です。

aの空欄・・・  Yの第0ビット
bの空欄・・・  Xを1ビット左シフト、Yを1ビット右シフト


過去問道場様の解説を読む。それと、過去問道場様のページに載っていたプログラム(javascript)をやってみる。
それでもなんとなくしっくりこなくて記事を書いている始末・・・。

基本は、「論理シフト」。2進数で、
1ビット左シフトすると2倍
1ビット右シフトすると1/2倍

で、10進数「3×3」を考えてみる。
(以下、細かくは書きません。メモ)

2進数だと、それぞれ
X 0011
Y 0011
になる。(桁数は割愛)

まず、回答aの  「Yの第0ビット:1」 のところの意味

Yが、001「1」だったら、下記の
(Z+X) → Z
をすることになる。(加算)

で、
X 0011(全体3)
Y 000「1」(1なら足すぞ)

と考え、Zが3になる。(X(全体3)がY(1)で該当なのでZ(元0)に入れる)

で、次に、回答bの  「Xを1ビット左シフト、Yを1ビット右シフト」 のところの意味

後半の「Yを1ビット右シフト」は、ループして回答aの  「Yの第0ビット:1」を2桁目に使用するための処理。
Y 00「1」1→000「1」(1なら足すぞ)

前半の「Xを1ビット左シフト」は、
X 0011→0110(全体6)になり、

計算
X 0110(全体6)
Y 000「1」(1なら足すぞ)

と考え、Zが合計9になる。(X(全体6)がY(1)で該当なのでZ(元3)に合算)


でも、何で、「Xを1ビット左シフト」するの?ということになってしまう。
結果から言えば、計算上「Yを1ビット右シフト」したからということなのだが、納得しにくい。

+++++++++++++++++++++++++++++++++++

アルゴリズムで考えなければ単純で、
X 0011
Y 0011
の掛け算の場合、

X 0011
Y 001「1」←1桁目の1を処理

Xは、全体3。で1(2進数の1ビット目の重み)を掛ける。で3

 

X 0011
Y 00「1」1←2桁目の1を処理

Xは、全体3。で2(2進数の2ビットの重み)を掛ける。で6

で3+6 =9


*************************************
4×3でも同じ
X 0100
Y 0011

X 0100
Y 001「1」←1桁目の1を処理

Xは、全体4。で1(2進数の1ビット目の重み)を掛ける。で4

X 0100
Y 00「1」1←2桁目の1を処理

Xは、全体4。で2(2進数の1ビット目の重み)を掛ける。で8

で4+8 =12

なんとなくそんな感じで納得。??