ビット演算シミュレーター(AND・OR・XOR・NOT・シフト)
2つの数値に対してAND・OR・XOR・NOT・左シフト・右シフトを計算し、ビットごとの変化を2進数のグリッドで可視化します。8/16/32ビットに対応。
使い方のヒント
- 値は10進数だけでなく、`0x1A` のような16進数、`0b1010` のような2進数の接頭辞付きでも入力できます。プログラミングで使う表記のまま試せます。
- AND・OR・XORは2つの値、NOTは1つの値のみを使う演算です。演算を切り替えると入力欄の数が自動的に変わります。
- 右シフト(>>>)は論理シフトのみに対応しています。符号ビットを考慮する算術シフトとの違いはFAQをご覧ください。
- ビット幅を8→16→32と変えると、同じ数値でも上位ビットの0の数が増えて見えることを確認できます。ビット幅の概念を理解する助けになります。
- 黄色くハイライトされたビットは演算前後で変化した桁です。AND・ORでどちらの入力の値が結果に反映されたかを視覚的に追えます。
よくある質問
余談ですが ― XORの不思議な性質と実用例
ビット演算はコンピューターの論理回路にそのまま対応する最も基本的な演算であり、CPUが1クロックで実行できるほど高速です。四則演算よりずっと単純な仕組みで実現できるため、パフォーマンスが重視される場面(画像処理・暗号・ネットワークプロトコルの実装など)では、掛け算や割り算の代わりにビット演算で同等の処理を行うテクニックが古くから使われてきました。
XOR(排他的論理和)には面白い性質があります。同じ値同士のXORは必ず0になり(`a ^ a = 0`)、0とのXORは元の値をそのまま返します(`a ^ 0 = a`)。この2つの性質を利用すると、一時変数を使わずに2つの変数の値を入れ替える「XORスワップ」という古典的なテクニックが成立します(`a ^= b; b ^= a; a ^= b;`)。現代では可読性の観点から実務ではあまり推奨されませんが、ビット演算の性質を学ぶ題材として今でもよく引用されます。
ビットマスクは実務でも幅広く使われています。Unixのファイルパーミッション(読み取り4・書き込み2・実行1の組み合わせ)はビットのORとANDそのものですし、RGBカラーコード `#FF0000` から赤・緑・青の各成分を取り出す処理も、右シフトとANDマスクの組み合わせで実現できます。複数のON/OFFフラグを1つの整数にまとめて管理する「ビットフラグ」というテクニックも、限られたメモリで多くの状態を扱う必要があった古いゲームやシステムのプログラミングで広く使われてきました。