算術シフト

算術シフトとは、左のビットシフトであれば、空いたビットを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を引くことと同じです。