平成29年度 春期 基本情報技術者試験 午前 問5
テクノロジ/アルゴリズム次の流れ図は,シフト演算と加算の繰返しによって2進整数の乗算を行う手順を表したものである。この流れ図中の a,b の組合せとして,適切なものはどれか。ここで,乗数と被乗数は符号なしの16ビットで表される。X,Y,Z は32ビットのレジスタであり,桁送りには論理シフトを用いる。最下位ビットを第0ビットと記す。 (注:本サイトでは原問題の表を文字表記に変換しています)

出典:平成29年度 春期 基本情報技術者試験 午前 問5
- アa:Yの第0ビット,b:Xを1ビット左シフト,Yを1ビット右シフト
- イa:Yの第0ビット,b:Xを1ビット右シフト,Yを1ビット左シフト
- ウa:Yの第15ビット,b:Xを1ビット左シフト,Yを1ビット右シフト
- エa:Yの第15ビット,b:Xを1ビット右シフト,Yを1ビット左シフト
正解:ア
解説
この流れ図は,乗数 Y の最下位ビットから順に判定していく筆算式の乗算アルゴリズムです。各回で Y の第0ビットが1(a:Yの第0ビット:1と等しい)なら被乗数 X を積 Z に加算し,その後 X を1ビット左シフトして桁を一つ上げ,Y を1ビット右シフトして次に判定するビットを最下位に移動させます(b)。これを16回繰り返すことで2進数の乗算が実現されます。
選択肢ごとの解説
- ア正しい。Yの最下位ビット(第0ビット)を順に見ていき,1ならXを加算した上で,Xを左シフト,Yを右シフトして次のビットへ進める,筆算どおりの乗算手順です。
- イ誤り。XとYのシフト方向が逆になっており,桁の重みが正しく処理されません。
- ウ誤り。判定するビットをYの第15ビット(最上位)にすると,桁の処理順序が逆になり正しい積が得られません。
- エ誤り。判定ビットとシフト方向の両方が誤っており,正しい積が得られません。