BIT SHIFT

ビットシフト演算のやり方

ビットシフトは、2進数の各ビットを左または右へ移動させる演算です。基本ルールを覚えれば、計算はかなりシンプルです。

左シフト(<<)

すべてのビットを左へ移動し、右側の空いた桁を0で埋めます。固定bit幅では、左端からはみ出したビットは捨てます。

8bit 00001101 << 1 ↓ 00011010
ポイント:桁あふれがなければ、1bit左シフトは値を2倍することと同じです。

右シフト(>>)

すべてのビットを右へ移動します。このトレーニングでは論理右シフトを扱い、左側の空いた桁は0で埋めます。

8bit 00110100 >> 2 ↓ 00001101
ポイント:符号なし整数では、1bit右シフトは小数部分を切り捨てながら2で割ることに相当します。

固定bit幅では「はみ出し」に注意

たとえば4bitの 1100 を左へ1bitシフトすると、本来は11000ですが、4bitでは左端の1が範囲外になります。

1100 << 1 11000 ↓ 4bitだけ残す 1000

算術右シフトとの違い

右シフトには「論理右シフト」と「算術右シフト」があります。論理右シフトは左側を0で埋めます。算術右シフトは符号付き整数で符号を維持するため、最上位ビットを引き継ぐ場合があります。

シフト演算を解く手順

まずbit幅を確認し、左または右へ指定数だけ移動します。論理シフトでは空いた桁を0で埋め、固定bit幅から外れたbitは捨てます。

具体例:8bitの左シフト

00101101 を1bit左へ論理シフト
01011010
元の値45に対して結果は90です。桁あふれがなければ、左1bitシフトは2倍に対応します。

右シフトの考え方

符号なし整数の論理右シフトでは、左側を0で埋めます。右へ1bit移動するごとに、整数としては概ね2で割る操作に対応します。

よくある間違い

bit幅を無視して桁を残さない
8bit問題なら結果も8bitです。また、論理シフトと符号を考慮する算術シフトを混同しないよう、問題文の指定を確認しましょう。

試験でのポイント

シフト後の2進数を書いてから10進数へ戻すと、暗算だけで処理するより桁あふれや0埋めのミスを減らせます。

ビットシフトとは?

ビットシフトは、2進数の各bitを左または右へ移動する操作です。左シフト・右シフトがあり、整数の計算やbit単位の処理を理解するうえで重要です。

左シフトすると何倍になる?

桁あふれがない符号なし整数では、1bit左へ移動すると2倍、2bitなら4倍、3bitなら8倍に対応します。

00101101₂(45)を1bit左へ論理シフト → 01011010₂(90)

右シフトするとどうなる?

符号なし整数の論理右シフトでは、1bit右へ移動するごとに整数として概ね2で割る操作に対応します。右端から外れたbitは捨てられます。

論理シフトと算術シフトの違い

論理シフトは空いたbitを0で埋めます。算術右シフトでは、符号付き整数の符号を保つため最上位bitを考慮して埋める場合があります。問題文でどちらのシフトか確認することが重要です。

ビットシフトでよくある間違い

指定されたbit幅を無視しない
8bitならシフト後も8bitとして考え、範囲外へ出たbitを残さないようにします。
理解したら10問練習
左シフト・右シフトを4bit・8bit・16bitで反復できます。