論理シフト 【logical shift】
概要
論理シフト(logical shift)とは、ビット列を指定した数だけ右または左にずらすビットシフト(bit shift)操作のうち、正負の符号ビットの存在を考慮しないもの。全ビット一律に移動させる。ビットシフト操作はビット列を右または左に指定の数だけ移動する操作だが、論理シフトでは最上位ビットも他の残りのビットと区別せず、ビット列全体を左右に移動させる。移動する方向と反対側に新たに現れるビットには「0」を補充する。
コンピュータでは負の数を表現したい場合に、最上位ビットと正負の符号を表す符号ビットとして、0または正なら「0」、負なら「1」とする規則を用いることが多いが、論理シフトは符号ビットを特別視せず移動してしまうため、符号付き整数の算術的な演算に用いることはできない。
例えば、「10011100」を右に2ビットシフトすると「00100111」となる。これらのビット列を符号付き整数とみなした場合、「10011100」は十進数で「-25」だが、「00111001」は「57」となる。正の数を右に2ビットシフトすると4で割るのと同じ効果があるが、負の数では算術計算は成り立たない。
一方、最上位ビットを固定して変化させず、残りのビットを左右に移動させる処理を行うビットシフト操作を「算術シフト」(arithmetic shift)という。左にシフトする場合は右端に「0」を補充するが、右にシフトする場合は左端に符号ビットの値(負なら「1」)を補充する。これにより、負の数をシフトしたときも1ビット移動するごとに2倍あるいは1/2倍となることが保証される。
(2022.12.14更新)