ビットシフト 【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更新)

他の用語辞典による「ビットシフト」の解説 (外部サイト)

資格試験などの「ビットシフト」の出題履歴

▼ 基本情報技術者試験
令6修6 問1】 数値を2進数で格納するレジスタがある。このレジスタに正の整数xを設定した後,“レジスタの値を2ビット左にシフトして,xを加える” 操作を行うと,レジスタの値はxの何倍になるか。
令2修6 問1】 数値を2進数で格納するレジスタがある。このレジスタに正の整数xを設定した後,“レジスタの値を2ビット左にシフトして,xを加える” 操作を行うと,レジスタの値はxの何倍になるか。
令1修7 問1】 数値を2進数で表すレジスタがある。このレジスタに格納されている正の整数xを10倍にする操作はどれか。ここで,桁あふれは起こらないものとする。
平29秋 問1】 数値を2進数で表すレジスタがある。このレジスタに格納されている正の整数xを10倍にする操作はどれか。ここで,桁あふれは起こらないものとする。
平29修7 問1】 数値を2進数で格納するレジスタがある。このレジスタに正の整数xを設定した後,“レジスタの値を2ビット左にシフトして,xを加える” 操作を行うと,レジスタの値はxの何倍になるか。
平29春 問5】 次の流れ図は,シフト演算と加算の繰返しによって2進整数の乗算を行う手順を表したものである。この流れ図中のa,bの組合せとして,適切なものはどれか。
平28春 問1】 数値を2進数で格納するレジスタがある。このレジスタに正の整数xを設定した後,“レジスタの値を2ビット左にシフトして,xを加える” 操作を行うと,レジスタの値はxの何倍になるか。
平28修1 問1】 数値を2進数で表すレジスタがある。このレジスタに格納されている正の整数xを10倍にする操作はどれか。ここで,桁あふれは起こらないものとする。
平26修7 問1】 数値を2進数で表すレジスタがある。このレジスタに格納されている正の整数xを10倍にする操作はどれか。ここで,桁あふれは起こらないものとする。
平26修7 問6】 流れ図は,シフト演算と加算の繰返しによって2進整数の乗算を行う手順を表したものである。この流れ図中のa,bの組合せとして,適切なものはどれか。
平23修12 問1】 数値を2進数で表すレジスタがある。このレジスタに格納されている正の整数xを10倍にする操作はどれか。ここで,シフトによる桁あふれは,起こらないものとする。
平23修6 問1】 数値を2進数で格納するレジスタがある。このレジスタに正の整数xを設定した後,“レジスタの値を2ビット左にシフトして,xを加える” 操作を行うと,レジスタの値はxの何倍になるか。
平21春 問1】 数値を2進数で格納するレジスタがある。このレジスタに正の整数xを設定した後,“レジスタの値を2ビット左にシフトして,xを加える” 操作を行うと,レジスタの値はxの何倍になるか。