「サンプルコードを実際に動かして、1行ずつどういう意味か」を追っていくと理解が深まります。ここでは ビット演算子とシフト演算子 を使ったシンプルなコードを例に、段階的に解説します。
サンプルコード
public class BitSample {
public static void main(String[] args) {
int a = 13; // 1101 (2進数)
int b = 6; // 0110 (2進数)
int andResult = a & b;
int orResult = a | b;
int xorResult = a ^ b;
int notResult = ~a;
int leftShift = a << 1;
int rightShift = a >> 1;
System.out.println("a & b = " + andResult);
System.out.println("a | b = " + orResult);
System.out.println("a ^ b = " + xorResult);
System.out.println("~a = " + notResult);
System.out.println("a << 1 = " + leftShift);
System.out.println("a >> 1 = " + rightShift);
}
}
Java実行の流れを追う
1. 変数の準備
a = 13→ 2進数で1101b = 6→ 2進数で0110
ここから「ビットごとの計算」をしていきます。
2. AND(&)
1101 (13)
& 0110 (6)
= 0100 (4)
→ 共通して1の部分だけ残る。結果は 4。
3. OR(|)
1101 (13)
| 0110 (6)
= 1111 (15)
→ どちらかが1なら1。結果は 15。
4. XOR(^)
1101 (13)
^ 0110 (6)
= 1011 (11)
→ 違うところだけ1。結果は 11。
5. NOT(~)
a = 00000000 00000000 00000000 00001101 (13)
~a= 11111111 11111111 11111111 11110010 (-14)
→ 全部反転するので、結果は -14。
6. 左シフト(<< 1)
1101 (13)
<< 1
=11010 (26)
→ 1ビット左にずらす。結果は 26。
7. 右シフト(>> 1)
1101 (13)
>> 1
= 0110 (6)
→ 1ビット右にずらす。結果は 6。
実行結果まとめ
a & b = 4
a | b = 15
a ^ b = 11
~a = -14
a << 1 = 26
a >> 1 = 6
ポイント
- ビット演算子は「0と1の重なり方」を見る
- シフト演算子は「ビットをスライドさせる」
- 実際に
System.out.println()で出力して確認すると、頭の中でイメージしやすくなる
👉 ここまでで「1行ずつの動き」を追いました。
