ビット単位OR計算ツールとは?
このツールは、2つの整数のビット単位OR(論理和)を計算します。多くのプログラミング言語では a | b と表記される演算です。OR演算は2つの数値をビットごとに比較し、対応するビットのどちらか一方(または両方)が1であれば結果のビットを1に、両方が0のときだけ0にします。
使い方
1つ目の整数(A)と2つ目の整数(B)を入力すると、10進数での結果が表示されます。正の整数だけでなく負の整数にも対応しています。入力も出力も10進数(基数10)で行われますが、内部では各数値を2進数表現として処理しています。
計算式の仕組み
演算はビットごとに、ORの真理値表に従って行われます。\(0\mathbin{|}0=0\)、\(0\mathbin{|}1=1\)、\(1\mathbin{|}0=1\)、\(1\mathbin{|}1=1\) です。例として A = 12、B = 10 を考えてみましょう。2進数では 12 = 1100、10 = 1010 です。桁を揃えて各列をORすると 1110 となり、10進数では 14 になります。つまり $$12 \mathbin{|} 10 = 14$$ です。
具体例で確認
\(5 \mathbin{|} 3\) を計算してみましょう。2進数では 5 = 101、3 = 011 です。各ビットをORすると、\(1\mathbin{|}0=1\)、\(0\mathbin{|}1=1\)、\(1\mathbin{|}1=1\) となり、111 = 7 になります。このツールでは 7 が返されます。
一般的なビット単位OR値のリファレンス
以下のグリッドは、0から8までのすべての小さなオペランドペアに対して \(A \mathbin{|} B\) を示しています。Aの行とBの列を読んでください。セルは10進数の結果です。
| | | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 1 | 1 | 1 | 3 | 3 | 5 | 5 | 7 | 7 | 9 |
| 2 | 2 | 3 | 2 | 3 | 6 | 7 | 6 | 7 | 10 |
| 3 | 3 | 3 | 3 | 3 | 7 | 7 | 7 | 7 | 11 |
| 4 | 4 | 5 | 6 | 7 | 4 | 5 | 6 | 7 | 12 |
| 5 | 5 | 5 | 7 | 7 | 5 | 5 | 7 | 7 | 13 |
| 6 | 6 | 7 | 6 | 7 | 6 | 7 | 6 | 7 | 14 |
| 7 | 7 | 7 | 7 | 7 | 7 | 7 | 7 | 7 | 15 |
| 8 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 8 |
対角線(A = Bの場合)は常にオペランド自体を返します。なぜなら x | x = x だからです。
ビット単位ORは、パーミッションフラグを組み合わせるための標準的な方法です。一般的なUnixスタイルのパーミッションビットは、読み取り = 4(100)、書き込み = 2(010)、実行 = 1(001)です:
| 組み合わせ | 式 | 10進数 | 2進数 |
|---|---|---|---|
| 読み取り + 書き込み | 4 | 2 | 6 | 110 |
| 読み取り + 実行 | 4 | 1 | 5 | 101 |
| 書き込み + 実行 | 2 | 1 | 3 | 011 |
| 読み取り + 書き込み + 実行(rwx) | 4 | 2 | 1 | 7 | 111 |
| 2つのバイトをマージ | 240 | 15 | 255 | 11111111 |
主要用語
- ビット
-
デジタルデータの最小単位で、
0または1のいずれかの単一の2進値を保持します。8ビットのグループが1バイトを形成します。 - ビットの設定/未設定
-
設定されたビットは値
1を持ちます。未設定(またはクリア)ビットは値0を持ちます。ビット単位ORは、他のビットに影響を与えずに特定のビットを設定するために一般的に使用されます。 - ビットマスク
- ビットパターンが別の値で特定のビットを選択、設定、またはクリアするために選択される整数です。マスクを値とOR演算すると、マスクで設定されているすべてのビットが結果で設定されます。
- フラグ
-
オン/オフの設定を表すために使用される個別のビット(多くの場合、名前付き定数が与えられます)。複数のフラグは1つの整数にパックされ、OR演算で組み合わせられます。例:
READ | WRITE。 - 2の補数
-
コンピュータが符号付き整数を表す標準的な方法です。最上位ビットは負の重みを持つため、
nビット数は \(-2^{n-1}\) から \(2^{n-1}-1\) の範囲です。例えば、-1はすべての1ビットとして格納されます。 - 最上位ビット/最下位ビット(MSB/LSB)
- MSBは最左のビットで、最大の桁値(2の補数では符号)を持ちます。LSBは最右のビットで、桁値 \(2^0 = 1\) を持ちます。
- 10進法対2進法
- 10進法(10進数)は、数字0~9を使用する日常の数値体系です。2進法(2進数)は0と1のみを使用し、各位置が2の累乗です。ビット単位演算は2進表現に対して作用し、このカリキュレータは結果を10進法で表示します。
よくある質問
ビット単位ORは足し算と同じですか? いいえ、違います。ORには「繰り上がり(キャリー)」がありません。\(1\mathbin{|}1\) は 1 のままですが、\(1+1\) は2進数で 10 へと繰り上がります。両者が一致するのは、オペランド同士でビットの「1」が重なっていない場合だけです。
負の数の場合は? 負の整数は2の補数表現を用いるため、符号ビットを含めて同じビット規則に従ってOR演算が行われます。
ORは何の役に立つの? ORは特定のビットを立てる(オンにする)ときや、フラグ値を組み合わせるときによく使われます。たとえば権限マスクを結合する場面などです。