アプリ版:「スタンプのみでお礼する」機能のリリースについて

基本情報処理の勉強を進めているものです。

秋の過去問題(午前)を進めて、分からない問題を考え中なのですが・・・

【問2】
非負の2進数 b1b2・・・bnを3倍したものはどれか。

ア:b1b2・・・bn0 + b1b2・・・bn
イ:b1b2・・・bn00 -1
ウ:b1b2・・・bn000
エ:b1b2・・・bn1

【正解】ア


この問題のbn0の、nの後についている[0]の意味は
「一番右側のビットに0を代入しています、という意味でしょうか?」
(1ビット左シフトしています(値を2倍しています)という意味でしょうか?)


【考え】
b1b2・・・bn (nを5ビット目としておく)
これによりビット列を仮に次の値としておく → 11001

(1)左シフトさせる 110010
b1b2・・・bn に、bn0の右横に追加で 0を入れる (一番右側に0を入れる)
0を入れたた結果として、b1b2・・・bn は1ビット左シフト行われることになる。
(2)1ビットシフト(2倍)された値に対して、元の値をプラスする(1倍を加算)する。
(3)3倍された値が算出される

という考えの元、
この問題の[0]の役割は
1ビット左にシフトする為のものである。
という理解で良いでしょうか?

【問題の意図】
シフト演算

A 回答 (1件)

そうです。




3倍する→2倍したものと元の数を足せば3倍です。
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。

【別途質問】
ア:b1b2・・・bn0 + b1b2・・・bn 2倍したもの+1倍 = 3倍
イ:b1b2・・・bn00 -1  ⇒ 4倍したものから1を引く ×
ウ:b1b2・・・bn000 ⇒ 8倍する ×
エ:b1b2・・・bn1 ⇒ 2倍したものに1を足す ×

私の中で、何故元の数を足すと倍数が増えるのか?とういところを完全に理解できていないため、もし宜しければ倍数の考え方について、ご意見、ご確認いただけないでしょうか。
(余り深く考えずに解いていたもので・・・)

【考え】
倍数とは、元ある数(もの)の固まりをの個数を表しているものである。

1倍 ⇒ 元ある数が1つある
2倍 ⇒ 元ある数が2つある
3倍 ⇒ 元ある数が3つある

この考えの元
シフト演算の結果 2倍された値(元ある数が2つある状態) から 元ある数を1つ追加することによって、3倍が実現されている、という理解で良いでしょうか。

お礼日時:2008/10/18 13:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!