BITAND 関数・BITOR 関数・BITXOR 関数は、2 つの数を 2 進数にして、桁(ビット)ごとに AND・OR・XOR を計算する関数です。12(1100)と 10(1010)の BITAND は、どちらも 1 の桁だけが残って 8(1000)になります。
「1=メール、2=電話、4=訪問」のように、いくつかの「あり・なし」を 1 つの数にまとめたフラグの判定に使えます。この記事では、3 つの関数の使い方を、実際の Excel で確かめた結果で説明します。
BITAND・BITOR・BITXOR 関数の書き方
=BITAND(数1, 数2)
=BITOR(数1, 数2)
=BITXOR(数1, 数2)
| 関数 | 桁ごとの計算 |
|---|---|
| BITAND | どちらも 1 の桁だけ 1 |
| BITOR | どちらかが 1 の桁は 1 |
| BITXOR | 片方だけ 1 の桁は 1 |
数は 0 以上の整数です。2 進数で確かめたいときは BASE(数,2) で表示できます。
1. 桁ごとの AND(BITAND)
I2 に式を入れて、下へコピーします。
=BITAND(A2,B2)

12 と 10 は 8、5(101)と 3(011)は 1 でした。
2. 桁ごとの OR(BITOR)
どちらかが 1 の桁を 1 にします。
=BITOR(A2,B2)

12 と 10 は 14、5 と 3 は 7 でした。
3. 桁ごとの XOR(BITXOR)
片方だけ 1 の桁を 1 にします。同じ数どうしは 0 になります。
=BITXOR(A2,B2)

12 と 10 は 6、2 と 2 は 0 でした。
4. フラグの判定(4 のビットがあるか)
数 1 の中に 4(100)の桁があるかを調べます。
=IF(BITAND(A2,4)>0,"あり","なし")

12(1100)は あり、5(101)は あり、2(10)は なし、9(1001)は なし でした。
【実機で検証】BITAND でつまずくところ

| ためしたこと | 式 | 結果 |
|---|---|---|
| BITLSHIFT(1,3)(左へ 3 桁) | =BITLSHIFT(1,3) | 8 |
| BITRSHIFT(16,2)(右へ 2 桁) | =BITRSHIFT(16,2) | 4 |
| マイナス(-1) | =BITAND(-1,3) | #NUM! |
| 小数(2.5) | =BITAND(2.5,3) | #NUM! |
| 2^48(大きすぎる) | =BITAND(2^48,1) | #NUM! |
| 2^48-1 | =BITAND(2^48-1,1) | 1 |
BITLSHIFT(1,3) は 8、BITRSHIFT(16,2) は 4 でした。左へ 1 桁ずらすと 2 倍、右へ 1 桁ずらすと半分になります。
マイナスを入れると #NUM!、小数の 2.5 でも #NUM! になりました。0 以上の整数だけが使えます。
2^48 は #NUM! で、2^48-1 までなら 1 と計算できました。
よくある質問
2 進数で表示したいときは?
BASE 関数で =BASE(数,2) と書くと、2 進数の文字になります。
TRUE・FALSE の XOR を出したいときは?
論理値の XOR は XOR 関数を使います。
3 つ以上の数の BITAND を出したいときは?
BITAND は 2 つの数だけなので、=BITAND(BITAND(A2,B2),C2) のように重ねます。

コメント