🌊

IT基礎 論理シフトと算術シフトの整理

2022/05/05に公開

コンピュータの基本

我々が普段使用している10進数は、人間にとって馴染みのあるものですが、コンピュータの場合は、0と1しか認識しない為、2進数を使用しています。
また、コンピューターが行う計算は、基本的には加算のみ(+)です。よって、減算(-)も、コンピュータが行う際は加算に変換して計算を行います。そして、乗算(*)や除算(/)を行う際は、シフト演算を使用して計算をしています。

乗算と除算

人間が扱う10進数では、乗算と除算はイメージしやすいですが、コンピュータの場合、ビット列を指定した回数を移動させることによって、計算を行なっています。
例えば、10進数の4は、2進数では、0100です。
これを2倍するときは左に移動させることにより2倍になります。
1000 = 10進数の8
コンピュータでは、このように計算=シフト演算を行なっています。

論理シフト

符号ビットがないビット列に対して行うシフト演算です。
符号ビットがないので、そのまま素直に計算します。

10進数8を2進数にすると、1000であり、
2倍するには左にシフトして10000 = 10進数の16
1/2するには右にシフトして100 = 10進数の4

算術シフト

符号ビットがあるビット列に対して行うシフト演算です。

10進数8を2進数にすると、11000であり、
2倍するには左にシフトして11000 = 10進数の16
1/2するには右にシフトして1100 = 10進数の4
※先頭の1が符号ビットのため、シフトを考慮しない

使い分け

明確な答えが出てきませんでしたが、
(-)を含む計算の場合は算術シフトを行う必要がありますが、
論理シフトのの方が扱えるビットが1つ増えるので、多くの計算ができるようです。

Discussion