算術シフト 【arithmetic shift】
概要
算術シフト(arithmetic shift)とは、ビット列を指定した数だけ右または左にずらすビットシフト(bit shift)操作のうち、正負の符号ビットの存在を考慮するもの。シフト演算を算術的に行うことができる。コンピュータで負数も表現できる符号付き整数をビット列で表す場合、最上位ビットを符号ビットとして、これが「0」なら0または正、「1」なら負という規則で値の正負を表す。
ビットシフト操作はビット列を右または左に指定の数だけ移動する操作だが、算術シフトでは最上位ビットの値は変更せず、2番目から最下位ビットまでを左右に移動する。左シフトの場合は下位側に「0」を、右シフトの場合は上位側に符号ビットの値を補充する。
例えば、「11100111」(-25)を左に2ビットシフトすると、最上位の「1」は変わらず、続く上位ビットが2桁ずつ左に移動して「00111」となり、末尾に「0」が2桁補充されて「10011100」(-100)となる。正の数の2ビット左シフトと同じように算術的に元の数の4倍となっている。
また、「10101000」(-88)を右に2ビットシフトすると、やはり最上位の「1」は変わらず、下位側が2桁ずつ右に移動して「01010」となり、空いた上位側に符号ビットの「1」が2桁補充されて「111010101」(-22)となる。正の数の2ビット右シフトと同じように算術的に元の数の1/4倍となっている。
一方、ビットシフト操作のうち符号ビットを考慮せず全ビット一律に左右に移動する操作のことを「論理シフト」(logical shift)という。ビット列が符号付き整数を表す場合には負数の算術的な計算ができないが、正の数しか扱わない符号なし整数や数値以外のデータのシフト操作に適している。
(2022.12.14更新)