次の流れ図は,シフト演算と加算の繰返しによって2進整数の乗算を行う手順を表したものである。
この流れ図中のa,bの組合せとして,適切なものはどれか。
ここで,乗数と被乗数は符号なしの16ビットで表される。
X,Y,Zは32ビットのレジスタであり,桁送りには論理シフトを用いる。
最下位ビットを第0ビットと記す。
正答1
解説
正解は1です。
シフトと加算の繰返しで2進数の乗算を行う流れ図の空欄を埋める問題です。
流れ図では、Xに被乗数、Yに乗数、Zに0、iに1を入れたあと、「a が1ならZにXを加える」「b を行う」「iに1を加える」をiが16を超えるまで、つまり16回繰り返し、最後にZを出力します。
【選択肢別解説】
1:○ 毎回Yの最下位である第0ビットを調べ、1ならその時点のXを部分積Zに加えます。
続いてXを1ビット左シフトして次の桁の重み(2倍)にし、Yを1ビット右シフトして次のビットを第0ビットへ送ります。
筆算の掛け算と同じ手順になります。
2:× Xを右シフトすると被乗数の値が半分になり、上位の桁ほど重みを大きくするという乗算の原理に反します。
Yを左シフトすると第0ビットには0しか入らず、乗数の各ビットを調べられません。
3:× Yの第15ビットを調べる方式なら、上位ビットから処理するのでYは左シフトで順に送る必要があります。
Yを右シフトすると第15ビットには0が入り、正しく判定できません。
4:× 第15ビットから調べてYを左シフトする組合せですが、上位ビットから処理するなら部分積Zを左シフトする必要があります。
Xを右シフトすると下位ビットが失われ、正しい積になりません。
【ポイント】
2進数の乗算は、乗数の下位ビットから順に見て、1なら被乗数を加え、被乗数を1ビットずつ左シフトする筆算と同じです。
16ビットどうしの積は最大32ビットになるため、レジスタが32ビットとされています。