広告

BITXOR関数の使い方|数値2つの排他的論理和を求める

2021年7月14日

=BITXOR(値1,値2)

bitxor_sample

BITXOR(ビット・エクスクルーシブ・オア)関数は、数値2つのビット単位'XOR'を返す関数です。数値のビットを「排他的論理和」することができます。

参考:BITXOR関数ドキュメントエディタヘルプ

排他的論理和とは

排他的論理和とは、

  • 0と0なら0
  • 0と1なら1
  • 1と0なら1
  • 1と1なら0

といった真偽値を返す演算のこと。

BITXOR関数の使い方. 構文

BITXOR関数の構文は以下のとおりです。

=BITXOR(値1,値2)

BITXOR関数の構文内訳

引数 説明
値1 必ず指定- 0以上の負でない整数を指定します。
値2 必ず指定- 値1と同様に、0以上の負でない整数を指定します。

BITXOR関数の使い方・実行サンプル

BITXOR関数を実行するサンプル。

BITXOR関数にて

  • 値1に8
  • 値2に3

以上の値を設定したときの結果を求めます。

BITXOR関数の変換内容が分かりやすいようにD列にDEC2BIN関数を設置して、2進数を表示しています。

10進数 2進数
数値1 8 =DEC2BIN(B2)
数値2 3 =DEC2BIN(B3)
計算結果 =BITXOR(B2,B3) =DEC2BIN(C4)

BITXOR関数で算出した結果。

10進数 2進数
数値1 8 1000
数値2 3 11
計算結果 11 1011

GIFで↓

bitxor_sample

値1が8・値2が3の場合、2進数は「110」となりBITXORの結果は「11」を返すことが分かります。

BITXOR_howto

OYAKUN
OYAKUN
2進数が「0011」の結果のとき、BITXORでは「11」を返すということですね。

BITXOR関数のサンプル実行結果

画像でBITXORサンプル実行結果を確認↓

bitxor_kekka

BITXOR関数 × GASの使い方・サンプル

BITXOR関数をGASで利用する際の、かんたんなサンプルを作成してみました。

実装する表のサンプル。

項目 値1 値2 BITXORの計算結果
10進数 デフォは空白 デフォは空白 デフォは空白
2進数 デフォは空白 デフォは空白 デフォは空白

実装するGAS

function BITXOR() {
var ss,sht,val01,val02,val03,val04,array,array1
ss = SpreadsheetApp.getActiveSpreadsheet();
sht = ss.getActiveSheet();
sht.getRange('B2:D3').activate();
sht.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
val01 = Browser.inputBox('数値を入力してください。(0以上の負でない整数)',Browser.Buttons.OK_CANCEL);
val02 = Browser.inputBox('シフトする桁数を入力してください。(512以下の整数)',Browser.Buttons.OK_CANCEL);
if(val01 == "cancel"|| val02 == "cancel"){
Browser.msgBox("処理を中止しました");
return;
} else {
array = [[val01,val02]];
sht.getRange(2,2,1,2).setValues(array);
val03 = '=DEC2BIN(B2)';
val04 = '=DEC2BIN(C2)';
val05 = '=DEC2BIN(D2)';
array1 = [[val03,val04,val05]];
sht.getRange(3,2,1,3).setValues(array1);
// BITXOR関数をセット
val06 = sht.getRange("D2").setFormula('=BITXOR('+val01+','+val02+')');
val07 = val06.getValue();
Browser.msgBox("BITXORの結果は「"+val07+"」です");
}
}

実行結果をGIFで

bitxor_gas

OYAKUN
OYAKUN
inputBoxへ値1と値2を入力することで、D2セルへBITXORの結果を返しています。(入力しなければキャンセルに)

BITXOR関数を使うときの注意点

注意1. 引数が制約範囲外の場合は#NUM!エラーを返す

BITXOR関数は、引数に制約範囲外の数値を指定すると#NUM!エラーを返します。

以下にサンプルを記載します。

項目 値1 値2 BITXORの計算結果
10進数 5 -2 #NUM!

bitxor_error1

OYAKUN
OYAKUN
C2に「-2]といった、0以下の数値を指定したことで、D2のBITXOR関数の算出結果が#NUM!エラーになっていることが分かります。
補足

BITXOR関数では「値1」「値2」どちらの引数に0以下の値を指定しても、結果は#NUM!を返します。

注意2. 数値が2^48(-1)より大きい値だと#NUM!エラーを返す

BITXOR関数では、数値が2^48(-1)より大きい値だと#NUM!エラーを返します

以下にサンプルを記載します。

項目 値1 値2 BITXORの計算結果
10進数 1 =2^48 #NUM!

bitxor_error2

OYAKUN
OYAKUN
B2セルの値が「=2^48」(281474976710656)の場合、D2セルのBITXOR関数の結果が#NUM!エラーに変わったことが分かります。
補足

BITXOR関数では数値を「=2^47」にする場合、もう一つの引数に1以上の値を指定すると#NUM!エラーを返します。

注意3. 引数に数値以外の値を指定すると#VALUE!エラーを返す

BITXOR関数では、引数に数値以外を指定すると#VALUE!エラーを返します

以下にサンプルを記載します。

項目 値1 値2 BITXORの計算結果
10進数 B2 5 #VALUE!

bitxor_error3

OYAKUN
OYAKUN
B2セルに「B2」と数値以外の値を指定したところ、D2セルのBITXOR関数の算出結果が#VALUE!エラーを返していることが分かります。
補足

BITXOR関数では文字列の数値"3"を数値の「3」へ、プール値TRUEを「1」へ強制変換することは可能です。

BITXOR関数の使い方. ExcelとGoogleスプレッドシートとの違い

BITXOR関数は、ExcelとGoogleスプレッドシートで基本的な使い方に相違はありません

BITXOR関数の引数である「値1」「値2」それぞれの順序を入れ替えても、同じ結果を返す点も同様です。

BITXOR関数の使い方 まとめ

BITXOR関数の使い方でした。 有効に活用するには、

  • 値1もしくは値2に0以下の数値を指定しない
  • 値1もしくは値2に2^48(-1)を指定しない
  • 引数にテキストなど数値以外を指定しない

といった感じですね。

ほぼBITOR関数と使い方は同じなのですが、返される値が異なるので「論理和」と「排他的論理和」の違いを抑えておきたいことろです。

OYAKUN
OYAKUN
BITXOR関数を使うことで、簡単に排他的論理和(BITOR関数は論理和)を求めることができるようになります...!(排他的論理和とは

関連記事: BITOR関数の使い方|2 つの数値のビット単位の ブール値'OR' を返す
関連記事: BITAND関数の使い方| 数値2つのビット単位の論理積を返す
関連記事: BETAINV関数の使い方|β分布区間に対しβ累積分布の逆関数の値を返す
関連記事: BETADIST関数の使い方|ベータ分布関数で定義された特定値の確率を返す