ビットシフト 【bit shift】 シフト演算

概要

ビットシフト(bit shift)とは、ビットを指定した数だけ右または左にずらす操作のこと。単にシフトと呼ぶこともある。シフトしてあふれたビットを反対側の端から順に挿入していく演算は「環状シフト」あるいは「ローテート」(ビットローテーション)という。

マイクロプロセッサなどが実行できる最も基本的な演算の一つで、加減算よりも単純な論理回路で実現でき高速に実行することができるため、様々なデータ処理・計算の一部としてよく用いられる。

ほとんどのプロセッサはビットシフトをうための命令語が用意されており、アセンブリ言語にも対応する命令が存在する。また、多くのプログラミング言語にも加減算などと共にビットシフトのための演算子などが用意されている。

右シフトと左シフト

ビット列全体を下位ビット側に移動することを右シフト、上位ビット側に移動することを左シフトという。移動の結果、端からあふれたは消滅し、反対側から同じだけ0(算術右シフトでは符号ビットのコピー)が挿入される。CPU内部の処理として、あふれたビットキャリーフラグ代入する動作がわれることもある。

ビットが整数を表す場合、右へ1ビット移動するごとにが半分になり、左へ1ビット移動するごとにが2倍になる。複数ビット移動すると2のべき乗倍あるいは2のべき乗分の1を得ることができる。この性質を利用して、算術演算実装の一部にシフト演算が組み込まれる場合がある。

算術シフトと論理シフト

最上位ビットは変化させず残りのビットシフトうものを「算術シフト」(arithmetic shift)、全ビットを一律に移動させるものを「論理シフト」(logical shift)という。

前者は最上位ビット符号ビットとして符号付き整数を表現する場合に、負数でもシフトによって2のべき乗の乗算をうことができる。例えば、「1010」を右に1ビット論理シフトすると左端に0が補充され「0101」になるが、右に1ビット算術シフトする場合は符号ビットのコピーが補充され「1101」となる。

(2021.5.2更新)

他の辞典による解説 (外部サイト)

この記事の著者 : (株)インセプト IT用語辞典 e-Words 編集部
1997年8月より「IT用語辞典 e-Words」を執筆・編集しています。累計公開記事数は1万ページ以上、累計サイト訪問者数は1億人以上です。学術論文や官公庁の資料などへも多数の記事が引用・参照されています。
ホーム画面への追加方法
1.ブラウザの 共有ボタンのアイコン 共有ボタンをタップ
2.メニューの「ホーム画面に追加」をタップ
閉じる