【ビットシフト演算】計算処理の高速化

この記事では、ビットシフト演算による掛け算や割り算の計算高速化の原理についてまとめました。

【ビットシフト演算とは】左シフト演算、右シフト演算

ビットシフト演算とは、桁を左右にシフトさせる演算です。
左に移動する場合を「左シフト演算」、右は「右シフト演算」といいます。

左シフト演算

記号は「<<」で、ビット列を左にずらします。(余ったところは0で埋められます)
2進数で1つずらす毎に、値が2倍になります。

使用例 結果 説明
0011 << 1 0110 3<<1 = 6となり、2倍するのと同じ効果

※n進数の場合、1ビット右にシフトするとn倍になる

右シフト演算

ビット列を右にずらします。(余ったところは0で埋める)
2進数で1つずらす毎に、値が2で割られます。

使用例 結果 説明
0011 >> 1 0001 3 >> 1 = 1となり、2で割るのと同じ効果

※n進数の場合、1ビット左にシフトすると1/n倍になる

普通の掛け算や割り算はコンピュータにとって重たい処理です。
そこで、コンピュータではビットをずらすだけのビット演算を使うことで掛け算・割り算の計算を高速化しています。

【例題】2進数のシフト演算

【問題】
正の整数xを以下のようにシフト演算すると値は何倍になるか。
①2ビット左にシフト
②xを加算
③1ビット左にシフト

【解答】
(2^2+1)×2^1=(4+1)×2=5×2=10倍

【例題】16進数小数の倍数計算

16進小数「0.FEDC」を4倍した結果はいくらか。

【解答】
① 16進数を2進数に変換します。
0.FEDC(16)=0.1111 1110 1101 1100(2)

② 進数のビット列を左に2ビット分シフトすると4倍計算となります。
(シフトによって空いた右のビットには0を入れる)
 11.1111 1011 0111 0000

③ ビット列を16進数に戻します。
3.FB70

【16進数】計算方法
16進数とは?各種計算方法についてまとめました。

コメント

タイトルとURLをコピーしました