指定した桁だけを 強制的に 1 にしたいとき、その桁を 1 にしたマスクと OR を取ります。他の桁は元の値のまま。
ビットマスクとは、ビット列の中で操作したい桁を選ぶための「型紙(マスク)」のことです。日常で例えるなら料理レシピのマスキングのような感覚で、「ここの桁だけ手を加えたい」「他の桁は触らない」というときに使います。
ビットマスクにはセット(1 にする)とクリア(0 にする)の 2 種類があり、このページでは 1 にする側を扱います。1 にしたい桁を 1 にしたマスクを作り、元の値と OR を取るだけ。上のツールで mask スライダーを動かすと、結果がリアルタイムで連動します。
なぜ OR を使うと特定の桁だけを 1 にできるのか、OR の性質を 1 桁ずつ確認すると見えてきます。OR は「どちらか片方でも 1 なら 1」。これを当てはめると次の 2 パターンに分かれます。
・マスクが 1 の桁:x OR 1 = 1。元の値に関係なく必ず 1 になる
・マスクが 0 の桁:x OR 0 = x。元の値がそのまま残る
つまりマスクの 1 の位置が「変更する桁」、0 の位置が「保護する桁」。具体例:
value: 0000 1010 (= 10)
mask: 0000 0101 (= 5) ← 最下位と 3 ビット目を立てたい
─────────────────────────
OR => 0000 1111 (= 15) ← 4 ビット全部 1 に
プログラミング言語では value | mask と書きます。「OR でビットを立てる、AND でビットを落とす」とセットで覚えるのが定石です。
ビットマスクで 1 にする操作は、実務でもよく使われる典型パターンです。
・フラグの ON(設定):1 バイトに複数の権限フラグを詰めて持つとき、新しい権限を「追加」する。例: 読み取り + 書き込み = 0b0011 に実行権限 0b0100 を OR して 0b0111
・レジスタのビットを有効化:マイコンや CPU の I/O 制御レジスタで、特定のピンや機能を ON にする
・カラー値の合成:32 ビット ARGB で α 値だけを最大に上書きする、特定チャネルを強制的に 255 にするなど
・状態の OR 結合:複数のオプション集合を 1 つにマージするとき。「いずれかが有効ならよし」という条件を表現できる
たとえば「2 ビット目を 1 にするマスク」は、立てたいビットだけを 1 にした 2 進数(この場合 0000 0100 = 4)になります。OR(設定)と AND(クリア)をペアで理解すると整理しやすくなります。