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

キーボード:1〜4 で解答 → 次の問題 ← 前の問題
正解と解説を見る
解答する前に解説を開いたので、この問題は「見て解いた」として記録します(正解数には入りません)。
正解:ア
2進数の乗算は、筆算と同じように「乗数の各ビットを下位から順に調べ、そのビットが1なら、そのけた位置までずらした被乗数を加える」ことで行えます。
流れ図の動き
- Z に部分積の合計を求めていきます。
- a: 乗数 Y の調べるビットが1なら Z+X → Z とします。毎回 Y を右シフトしていけば、調べるビットは常に Y の第0ビット(最下位ビット)になります。
- b: 次のけたの処理に備えて、被乗数 X を1ビット左シフト(2倍)し、乗数 Y を1ビット右シフトして次のビットを第0ビットに移します。
- これを i=1〜16 の16回繰り返すと、16ビット同士の積が Z に求まります。
各選択肢の確認
-
ア: a=Yの第0ビット,b=Xを1ビット左シフト,Yを1ビット右シフト 正しい。乗数の下位ビットから順に調べ、被乗数をけた上げしながら加算する正しい手順です。
-
イ: a=Yの第0ビット,b=Xを1ビット右シフト,Yを1ビット左シフト 誤り。Y を左シフトすると第0ビットは常に0になり、X を右シフトすると被乗数の下位ビットが失われます。
-
ウ: a=Yの第15ビット,b=Xを1ビット左シフト,Yを1ビット右シフト 誤り。1回目は乗数の最上位ビット(第15ビット)を調べますが、Y を右シフトすると第15ビットには上位の0が入ってくるため、2回目以降は乗数のビットを調べられません。また、最上位ビットに対応する重みも正しくありません。
-
エ: a=Yの第15ビット,b=Xを1ビット右シフト,Yを1ビット左シフト 誤り。乗数を上位ビットから調べる場合は、被乗数の重みを最大から始める必要がありますが、X は初期値から右シフトされるため下位ビットが失われ、正しい積になりません。
答え
ア: a=Yの第0ビット,b=Xを1ビット左シフト,Yを1ビット右シフト
出典:平成22年度 春期 応用情報技術者試験 午前 問5