算術シフトとは
算術シフトは、数値を乗算または除算する方法です。 算術シフトは通常、2進数で実行されます。 ただし、この概念は任意の番号付けスキームに適用できます。
以下は、10を基数とする10進数を使用した例です。 250が算術的に左にシフトされると、結果の数値は2500になり、250に10を掛けます。 250が4桁を使用して0250として表される場合、算術的に右にシフトされ、結果の数値は0025になります。 したがって、算術シフトは、数値スキームの基数で数値を乗算または除算する方法であると言う方が正しいです。
2進数の基数は2です。 これらは0と1を使用して表され、署名または署名なしにすることができます。 算術左シフトでは、数字が1スペース左にシフトされ、ゼロが右に配置されます。 算術右シフトでは、数値は1スペース分右にシフトされ、左端の数値が左に保持されます。 一般に、シフトは「n」個のスペースに対して行うことができます。
符号なし2進数では、各位置は2の累乗であるため、2進数1は10進数1、2進数10は10進数2、2進数100は10進数4などとなります。 したがって、0110は10進数6です。算術左シフトが実行されると、結果の数値は1100(10進数12)です。算術右シフトが実行されると、結果の数値は0011(10進数3)です。
数値は正と負の両方である可能性があるため、左端のビットが正の数値またはゼロの場合は0、負の数値の場合は1である符号付き2進数が使用されます。 したがって、4ビットの数値の場合、10進数の7である0111が最大の正数です。 負の数に最もよく使用されるスキームには、小数-1として1111があり、これは1000まで、つまり小数-8です。
たとえば、1101の算術左シフト(10進数-3)は、1010(10進数-6)になります。 1010の算術右シフト(10進数-6)は、1101(10進数-3)になります。 左端のビットが保持されていることに注意してください。
算術シフトは、常に番号スキームの各番号の乗算と除算に対応するとは限りません。 番号スキームの両端には制限があります。 たとえば、10進数7の0111の左シフトは10進数-2を与え、1111の右シフトは10進数-1を与えて10進数-1を与えます。
算術シフトには固有の単純さがあり、シフトは通常の乗算と除算よりもはるかに高速に実行されます。 したがって、コンピューターは、シフトユニットまたはシフトレジスタと呼ばれる比較的単純なメカニズムを使用してこの操作をサポートします。 熟練したプログラマーは、上記の制限が回避または対処されている限り、この操作を利用します。