FE EXAM

ビット反転= XOR + マスク

XOR の「同じなら 0、違えば 1」という性質を使い、マスクの 1 の位置だけを反転 する操作。0 の桁は元のまま保持されます。

INTERACTIVE VISUALIZATION
マスク
反転した桁
value
179
mask
15
value ^ mask
188
値(value)179
マスク(反転したい桁を 1 にする)15
プリセット
value
mask
XOR =
解説

📌
ビット反転とは

value10110011mask00001111result10111100

ビット反転とは、ビットの値を「0 ↔ 1」とひっくり返すことです。日常で例えると、電気のスイッチを切り替える動作に近いイメージで、ON は OFF に、OFF は ON になります。

単純に「全部反転」したいだけなら NOT 演算で済みますが、特定の桁だけを選んで反転したい場合があります。そんなときに使うのが「XOR + マスク」の組み合わせです。マスクの 1 の位置だけ反転、0 の位置はそのまま。上のツールで mask を動かすと、反転される桁(オレンジ)と保持される桁の対比が見えます。

🔍
XOR で反転させる仕組み

XOR は「2 つの入力が違えば 1、同じなら 0」になる演算です。これを 1 桁ずつ当てはめると、反転になるかどうかが綺麗に分かれます。
マスクが 1 の桁0 XOR 1 = 11 XOR 1 = 0。必ず反転する
マスクが 0 の桁x XOR 0 = x。元の値がそのまま残る

AND(0 にする)や OR(1 にする)と違って、XOR は元の値に依存して結果が変わるのが特徴です。具体例:

value: 1011 0011 (= 179)
mask: 0000 1111 (= 15) ← 下位 4 ビットを反転したい
─────────────────────────
XOR => 1011 1100 (= 188) ← 下位 4 ビットだけ反転

さらに重要な性質として、同じマスクで 2 回 XOR すると元に戻るという可逆性があります。(value ^ mask) ^ mask = value。これが暗号やトグル処理で XOR が好まれる理由です。

🛠
用途 — フラグ切替など

ビット反転は、実務でいろいろな場面で活躍します。
フラグの ON/OFF トグル(切替):「クリックされたら状態を反転させる」UI ロジックで、AND と OR を組み合わせる代わりに 1 回の XOR で完結する
1 の補数を作る:マスクを全 1(0xFF など)にして XOR すると、全ビット反転 = 1 の補数になる
簡易暗号:データと鍵を XOR すると暗号化、同じ鍵でもう一度 XOR すると復号できる(XOR の可逆性)。ストリーム暗号の基本原理
パリティ計算:ビット列全体を XOR すると、1 が奇数個か偶数個かが分かる。エラー検出に使われる
変数の値交換(XOR swap)a^=b; b^=a; a^=b; で a と b の値を中間変数なしに入れ替えられる(古典的なテクニック)

XOR の動きは「マスクの 1 の位置だけ反転する」という 1 つの原則に集約されます。これを押さえれば、ビット列とマスクの XOR や全ビット反転の結果も同じ考え方で求められます。

関連コンテンツ