平成22年度 高度共通 午前I(PM試験) 問2

分野:アルゴリズムとプログラミング(データ構造・アルゴリズム・探索整列・計算量の実際・擬似言語・プログラム言語・データ記述言語)|実際に出題されたIPA過去問題

流れ図は,シフト演算と加算の繰返しによって2進整数の乗算を行う手順を表したものである。この流れ図中のa,bの組合せとして,適切なものはどれか。ここで,乗数と被乗数は符号なしの16ビットで表される。X,Y,Zは32ビットのレジスタであり,けた送りには論理シフトを用いる。最下位ビットを第0ビットと記す。

問題の図表(IPA公式問題冊子より引用)
図表:IPA公式問題冊子より
  1.  a:Yの第0ビット,b:Xを1ビット左シフト,Yを1ビット右シフト
  2.  a:Yの第0ビット,b:Xを1ビット右シフト,Yを1ビット左シフト
  3.  a:Yの第15ビット,b:Xを1ビット左シフト,Yを1ビット右シフト
  4.  a:Yの第15ビット,b:Xを1ビット右シフト,Yを1ビット左シフト
解答・解説を見る

正解:ア

AI解説

この流れ図は10進の筆算と同じ原理で2進乗算を行う。乗数Yの最下位ビット(第0ビット)を調べ,1なら被乗数XをZ(積)に加算する。次のけたの処理に移るため,Xは1ビット左シフトして2倍し(けた上げに相当),Yは1ビット右シフトして次に判定するビットを第0ビットの位置に移す。これを16回繰り返すと積が得られる。よってaは「Yの第0ビット」,bは「Xを左シフト,Yを右シフト」の組合せが適切である。 ア: 正解。最下位ビットで加算を判定し,被乗数を左へ,乗数を右へシフトする標準的な2進乗算の手順である。 イ: シフト方向が逆である。Xを右シフトすると被乗数が2倍ではなく1/2になってしまい,正しい積が得られない。 ウ: 判定ビットが第15ビットでは,Yの右シフトと組み合わせたとき乗数の各ビットを正しい順に判定できない。 エ: 判定ビットとシフト方向の組合せがともに不適切である。 💡 「最下位ビットで判定→当たれば加算→Xを左シフト・Yを右シフト」が2進乗算の基本形。10進の筆算で部分積をけたをずらしながら足すイメージに対応させると覚えやすい。

出典:平成22年度 秋期 プロジェクトマネージャ試験 午前I 問2 / 独立行政法人情報処理推進機構(IPA)
※Web掲載用に表記を一部変更しています。図表はIPA公式問題冊子から引用しています。著作権はIPAに帰属します。
📱 演習アプリで解く(無料・登録不要・904問収録)

「アルゴリズムとプログラミング」分野の攻略ポイント

データ構造・アルゴリズム・探索と整列・計算量・擬似言語・プログラム言語・データ記述言語が対象です。擬似言語のトレースは時間はかかるものの、落ち着いて表を書けば必ず正解にたどり着く「確実に取れる」問題です。

アルゴリズムとプログラミングの攻略ポイントをすべて見る(要点6項目・ひっかけ3項目)→

同じ分野(アルゴリズムとプログラミング(データ構造・アルゴリズム・探索整列・計算量の実際・擬似言語・プログラム言語・データ記述言語))の過去問