この記事では、ビットシフト演算による掛け算や割り算の計算高速化の原理についてまとめました。
[latexpage]
ビットシフト演算とは
ビットシフト演算とは、桁を左右にシフトさせる演算です。
左に移動する場合を「左シフト演算」、右は「右シフト演算」といいます。
左シフト演算
記号は「<<」で、ビット列を左にずらします。(余ったところは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進数とは?各種計算方法についてまとめました。
関連ページ
【離散数学】2進数、基数、数値表現、演算精度、集合、ベン図、論理演算、命題
離散数学(2進数、基数、数値表現、演算精度、集合、ベン図、論理演算、命題など)について解説します。
【情報処理入門】用語解説・資格試験対策まとめ
情報処理分野の用語・原理・資格試験対策について解説します。
コメント