ビットマスクによるフラグ管理
4つの基本ビットマスク操作を習得:特定ビットの設定、クリア、トグル、チェック。システムおよびアプリケーションにおけるフラグベースプログラミングの基礎。
Bitmask Patterns
詳細な説明
4つのビットマスク操作
フラグベースプログラミングでは整数内の個別のビットを使用してブール状態を表現します。4つの操作がフラグ管理の完全なツールキットを構成します。
1. ビットを設定(ONにする)
ターゲット位置に1を持つマスクとOR:
value = value | (1 << bitPosition);
// 省略形: value |= (1 << bitPosition);
例:0b00001010のビット3を設定:
0b00001010
| 0b00001000 (1 << 3)
──────────────
0b00001010 (ビット3はすでに設定済み、変更なし)
2. ビットをクリア(OFFにする)
マスクのNOTとAND:
value = value & ~(1 << bitPosition);
// 省略形: value &= ~(1 << bitPosition);
例:0b00001010のビット1をクリア:
0b00001010
& 0b11111101 (~(1 << 1))
──────────────
0b00001000
3. ビットをトグル(反転)
マスクとXOR:
value = value ^ (1 << bitPosition);
// 省略形: value ^= (1 << bitPosition);
4. ビットをチェック(読取)
ANDしてゼロと比較:
const isSet = (value & (1 << bitPosition)) !== 0;
複数フラグの同時操作
4つの操作はすべてマルチビットマスクで動作します。ビット0と2を同時に設定:
const MASK = (1 << 0) | (1 << 2); // 0b00000101
value |= MASK; // 両方設定
value &= ~MASK; // 両方クリア
value ^= MASK; // 両方トグル
ユースケース
オペレーティングシステムのカーネルはプロセス状態、ファイルディスクリプタ、メモリページ属性にビットマスクフラグを広く使用します。Linuxでは`open()`システムコールがO_RDONLY(0)、O_WRONLY(1)、O_RDWR(2)、O_CREAT(0x40)、O_TRUNC(0x200)などのフラグをORで結合して受け取ります。カーネルは個別のフラグをANDでチェックして要求された動作を判断します。