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