右シフト 【right shift】
概要
右シフト(right shift)とは、ビット列を指定した数だけ移動させるビットシフト(bit shift)操作のうち、ビット列を下位側へ移動させるもの。ビット列の上位側を左、下位側を右に記す記法が浸透しているためこのように呼ばれる。ビット列を指定した桁数だけ右に移動する操作を意味する。全体を一律に移動する「論理シフト」(logical shift)の場合、右側に溢れた値は消滅し、左側の空いたビットには「0」が補充される。例えば、「00111000」を右に2ビットシフトすると「00001110」となる。
ビット列を(正の)整数とみなしたとき、右に1ビットシフトするごとに値が1/2になる。先の例で「00111000」は十進数で「56」、2ビット右シフトした「00001110」は「14」であり、ちょうど1/4になっている。これを利用して、整数の計算処理の一部にシフト命令を取り入れることがある。
一方、コンピュータでは負の整数を表したいときに最上位ビットで正負の符号を表す(「0」なら0または正、「1」なら負)場合があるが、これを考慮したビットシフト操作を「算術シフト」(arithmetic shift)という。算術右シフトでは、右端側のビットが溢れて消滅するのは論理シフトと同じだが、左端からは符号ビットと同じ値が補充される。これにより、負の数の計算においても、右に1ビットシフトするごとに値が1/2になるという関係が維持される。
プログラミング言語の中には右シフトを表す演算子を用意しているものがある。C言語やその記法を受け継ぐ多くの言語では「>>」が右シフト演算子となっており、「x=>>2;」と記述すると「xを右に2ビットシフトする」という意味になる。これとは逆に、ビット列を左(上位側)に移動するシフト操作は「左シフト」(left shift)という。
(2022.12.14更新)