では ビット演算でフラグ管理をする実践例 を、ステップごとに初心者向けに作ってみましょう。
今回は「メニューの ON/OFF」を管理する例です。
1. 何を作るか
- 3つの機能(メニュー)があります:
- 音楽
- 効果音
- 通知
- 各メニューの ON/OFF 状態を 1つの整数(flags) で管理します。
- ビット演算で「ON にする・OFF にする・状態を確認する」を行います。
2. フラグを定義する
final int MUSIC = 1 << 0; // 0001 → 音楽
final int SOUND = 1 << 1; // 0010 → 効果音
final int NOTIFY = 1 << 2; // 0100 → 通知
Javaポイント:
1 << nは「2^n」のビットを1にする操作です。
- MUSIC = 1 = 0001
- SOUND = 2 = 0010
- NOTIFY = 4 = 0100
3. 初期状態(全部OFF)
int flags = 0; // 0000 → 全部OFF
Java4. メニューをONにする
// 音楽と通知をONにする
flags |= MUSIC; // 音楽ON
flags |= NOTIFY; // 通知ON
System.out.println("状態: " + Integer.toBinaryString(flags)); // 0101
Java
flags |= MUSICはflags = flags | MUSICと同じ意味。
「既存の状態を壊さずに、このビットだけ1にする」操作です。
5. メニューをOFFにする
// 通知をOFFにする
flags &= ~NOTIFY; // NOTIFYビットを反転してAND
System.out.println("状態: " + Integer.toBinaryString(flags)); // 0001
Java
flags &= ~NOTIFYは「このビットだけ0にする」操作です。
6. メニューの状態を確認する
boolean musicOn = (flags & MUSIC) != 0;
boolean soundOn = (flags & SOUND) != 0;
boolean notifyOn = (flags & NOTIFY) != 0;
System.out.println("音楽: " + musicOn); // true
System.out.println("効果音: " + soundOn); // false
System.out.println("通知: " + notifyOn); // false
Javaポイント:
flags & MUSICが0でなければONです。
7. メニューを切り替える(toggle)
// 音楽をON/OFF切り替え
flags ^= MUSIC;
System.out.println("音楽状態切り替え後: " + ((flags & MUSIC) != 0)); // false
^=(XOR)は「今の状態をひっくり返す」のに便利です。
8. 完全なサンプルコード
public class MenuFlags {
public static void main(String[] args) {
final int MUSIC = 1 << 0; // 0001
final int SOUND = 1 << 1; // 0010
final int NOTIFY = 1 << 2; // 0100
int flags = 0; // 全部OFF
// ONにする
flags |= MUSIC;
flags |= NOTIFY;
System.out.println("ON後: " + Integer.toBinaryString(flags));
// OFFにする
flags &= ~NOTIFY;
System.out.println("OFF後: " + Integer.toBinaryString(flags));
// 状態確認
System.out.println("音楽: " + ((flags & MUSIC) != 0));
System.out.println("効果音: " + ((flags & SOUND) != 0));
System.out.println("通知: " + ((flags & NOTIFY) != 0));
// 切り替え
flags ^= MUSIC;
System.out.println("音楽切り替え後: " + ((flags & MUSIC) != 0));
}
}
Java💡 初心者向けポイント
- 1つの整数で複数ON/OFFを管理できるので便利。
|=でON、&= ~でOFF、^=で切り替えが基本。- 確認は
(flags & FLAG) != 0でOK。 - ビットの動きは二進数で考えると理解しやすい。


