平成22年秋季 午後問8 設問2

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
野獣さん  
(No.1)
スレタイの設問について質問です。
(2)のfの解説で

ループ中では作業領域Rの0,1ビット目が"01"または"10"のときに加減算を行いますので、ビット列が0から1に変わるとき、1から0に変わるときに演算が行われることになります。
プログラムの初期化部で、Rの0ビット目は0で初期化され、1~4ビット目にNが複写されるので、この5つのビットの組合せ中、最も0から1、1から0の切り替わりが多いものが演算回数が多くなるはずです。

N<0ではこの5ビットが"10100"、"10010"、"11010"、"10110"のときに演算回数が最も多く3回の演算が必要になります。 

とありますが、右2ビットが00や11のときは加減算が行われないはずなのになぜ10100のような数字列が演算回数が最も多くなるのですか?

0から1、1から0の切り替わりのときに演算が行われるというのも理解できません。ループの初めに右2ビットをチェックして該当すれば演算するのではないのでしょうか?

11010の場合は、右2ビットが10→01→10と変化するため3回の演算が必要になることは理解できます。

解説お願いします。
2015.10.14 22:38
おにくさん 
(No.2)
ループを4回やるため、野獣さんが挙げた10100の右2ビットは
00→10→01→10と変化するので3回演算します。

"0から1、1から0の切り替わりのときに演算が行われる"の方は
右に1ビット算術シフトした後にビット番号1のビットが変化してたら演算すると
いうことだと思います。
こちらも野獣さんが挙げた11010の場合では
右2ビットが10→01→10→11と変化します。ビット番号1のビットに注目すると
シフト前と比べて変化していたら演算します。











































2015.10.15 14:02

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。

その他のスレッド


Pagetop