算術シフトとは、左のビットシフトであれば、空いたビットを0で埋め、右のビットシフトであれば、空いたビットを符号ビットで埋めるビットシフトのことです。
例えば、以下は、8桁のビット列11001100を3ビット左に算術シフトした例です。なお、左に溢れた3ビットは消えます。
|11001100| (シフト前)
|01100000| (シフト後)
以下は、8桁のビット列11001100を3ビット右に算術シフトした例です。なお、右に溢れた3ビットは消えます。
|11001100| (シフト前)
|11111001| (シフト後)
以下は、8桁のビット列01001100を3ビット右に算術シフトした例です。
|01001100| (シフト前)
|00001001| (シフト後)
なお、符号ビット付き2進数をnビット左に算術シフトすると、その2進数は、2^[n]]倍されます。
プラス値の符号ビット付き2進数をnビット右に算術シフトすることは、その2進数を2^[n]]で割って、.商.を求めることと同じです。
マイナス値の符号ビット付き2進数をnビット右に算術シフトすることは、溢れたビットがすべて0であれば、その2進数を2^[n]]で割って、.商.を求めることと同じです。
マイナス値の符号ビット付き2進数をnビット右に算術シフトすることは、溢れたビットに1を含めば、その2進数を2^[n]]で割って求めた.商.から1を引くことと同じです。