ビットマスクによるフラグ管理

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でチェックして要求された動作を判断します。

試してみる — Bitwise Calculator

フルツールを開く