【Alteryx関数シリーズ】数学ビット関数の使い方

Alteryxで使用できる関数の「数学ビット関数」の使い方をご紹介します

 

数学ビット関数のカテゴリの関数は、2進数のビット演算を行うことが可能です。実際のところ、利用機会は少ないかもしれません。

数学(ビット)カテゴリの関数一覧

やりたいこと 関数名 概要
ビット毎のANDを取得 BinaryAnd(n,m) 2進数のAND計算の結果を、十進数の値で返します。
ビット毎のNOTを取得 BinaryNot(n) 2進数のNOT計算の結果を、十進数の値で返します。
ビット毎のORを取得 BinaryOr(n,m) 2進数のOR計算の結果を、十進数の値で返します。
ビット毎のXORを取得 BinaryXOr(n,m) 2進数のXOR計算の結果を、十進数の値で返します。
ビットを左にシフト ShiftLeft(n, b) 2進数を指定したビット分左にシフトした値を、十進数で返します。
ビットを右にシフト ShiftRight(n, b) 2進数を指定したビット分右にシフトした値を、十進数で返します。

 

注意

ビット関数は、入力する値も返ってくる値も10進数という点はご注意ください。内部的には2進数で計算していますが、表示上は10進数のため、計算の結果がイメージしにくいかと思います。そのような場合は、「IntToBin」関数を使うことで2進数で表示ができます(テキスト型で表示されます)。ただ、変換後の2進数表示は本記事で取り扱っているビット関数の入力値として使えないのでご注意ください。

本記事のサンプルもIntToBin関数を使った2進数表示を行っていますので、参考にして頂ければと思います。

 

各関数の使い方とサンプル

BinaryAnd ・・・ 2進数のAND計算の結果を、十進数の値で返します

BinaryAnd(n,m)

2つの数値 n と m をの2進数のAND計算の結果を、十進数の値で返します。論理値ANDは以下の表の通りです。

n m AND演算
1 1 1
0 1 0
1 0 0
0 0 0

2つの数値がどちらも1であれば1、それ以外は0が返ってきます。

 

Sample

下の例では、n 列、m 列に対してBinaryAnd関数を使っています。より分かりやすくするために、n 列、m 列、BinaryAndで返ってきた値を2進数で表した列も表示しています。

上の例の2レコード目では、n = 5、m = 6 を入力して、4 の値が返ってきました。詳しく見ていきます。

n = 5を2進数で表すと「101」、n = 6を2進数で表すと「110」です。これを上のAND表に照らし合わせ、桁ごとにANDをとると、得られる値は 2進数「100」になります。この「100」を10進数に変換した「4」の値が、BinaryAnd関数で取得された値になります。

10進数 2進数
n 5 101
m 6 110
BinaryAnd(n,m) 4 100

 

 

 

BinaryNot ・・・ 2進数のNOT計算の結果を、十進数の値で返します

BinaryNot(n)

2つの数値 n の2進数のNOT計算の結果を、十進数の値で返します(数値 n をの2進数の 0 と 1 を反転し、十進数の値で返します)。この時、符号を表すビットも反転するため、正の数は負の数、負の数は正の数で返ります。

論理値ANDは以下の表の通りです。

n NOT演算
1 0
0 1

 

Sample

下の例では、n 列に対してBinaryNot関数を使っています。より分かりやすくするために、n 列の値、BinaryNotで返ってきた値を2進数で表した列も表示しています(負の数の場合は符号を含めた64ビットで表示されています)。

上の例の2レコード目では、n = 5 を入力して、-6 の値が返ってきました。詳しく見ていきます。

n = 5を2進数で表すと「101」です。これを上のNOT表に照らし合わせ、桁ごとにNOTをとると、得られる値は 2進数「1111111111111111111111111111111111111111111111111111111111111010」になります(64bit で表示されます)。この「100」を10進数に変換した「-6」の値が、BinaryNot関数で取得された値になります。

10進数 2進数(64bit)
n 5 0000000000000000000000000000000000000000000000000000000000000101
BinaryNot(n) -6 1111111111111111111111111111111111111111111111111111111111111010

 

BinaryOr ・・・ 2進数のOR計算の結果を、十進数の値で返します

BinaryOr(n,m)

2つの数値 n と m をの2進数のOR計算の結果を、十進数の値で返します。論理値ORは以下の表の通りです。

n m OR演算
1 1 1
0 1 1
1 0 1
0 0 0

2つの数値のうち、どちらか一方が1であれば1とし、両方0であれば0が返ってきます。

 

Sample

下の例では、n 列、m 列に対してBinaryOr関数を使っています。より分かりやすくするために、n 列の値、m 列の値、BinaryOrで返ってきた値を2進数で表した列も表示しています。

この例の2レコード目では、n = 5、m = 6 を入力して、7 の値が返ってきました。詳しく見ていきます。

n = 5を2進数で表すと「101」、n = 6を2進数で表すと「110」です。これを上のOR表に照らし合わせ、桁ごとにORをとると、得られる値は 2進数「111」になります。この「111」を10進数に変換した「7」の値が、BinaryOr関数で取得された値になります。

10進数 2進数
n 5 101
m 6 110
BinaryOr(n,m) 7 111

 

BinaryXOr ・・・ 2進数のXOR計算の結果を、十進数の値で返します

BinaryXOr(n,m)

2つの数値 n と m をの2進数のXOR計算の結果を、十進数の値で返します。論理値XORは以下の表の通りです。

n m XOR演算
1 1 0
0 1 1
1 0 1
0 0 0

2つの数値のうち、いずれか一方が1の時のみ1が返り、両方1もしくは両方0の場合は0が返ります。

 

Sample

下の例では、n 列、m 列に対してBinaryXOr関数を使っています。より分かりやすくするために、n 列の値、m 列の値、BinaryXOrで返ってきた値を2進数で表した列も表示しています。

上の例の 1 レコード目では、n = 5、m = 6 を入力して、3 の値が返ってきました。詳しく見ていきます。

n = 5を2進数で表すと「101」、n = 6を2進数で表すと「110」です。これを上のXOR表に照らし合わせ、桁ごとにXORをとると、得られる値は 2進数「011」になります。この「011」を10進数に変換した「3」の値が、BinaryXOr関数で取得された値になります。

10進数 2進数
n 5 101
m 6 110
BinaryXOr(n,m) 3 011

 

 

ShiftLeft ・・・ 2進数を指定したビット分左にシフトした値を、十進数で返します

ShiftLeft(n, b)

数値 n  を2進数に変換し、指定したビット分左にシフトした値を、十進数で返します。左シフト関数の結果は、数値 n の 2のべき乗による乗算に相当します(算術シフト)。

 

Sample

下の例では、n 列に対してShiftLeft関数を使っています。より分かりやすくするために、n 列の値、m 列の値、ShiftLeftで返ってきた値を2進数で表した列も表示しています。

上の例の 1 レコード目では、n = 5 を入力して、ShiftLeft (n , 1 )では 10 の値が、 ShiftLeft (n , 2 )では 20 の値が返ってきました。詳しく見ていきます。

ShiftLeft (n , 1 )から見てみます。n = 5を2進数で表すと「101」です。これを左に 1 ビットずらすと得られる値は 2進数「1010」になります。この「1010」を10進数に変換した「10」の値が、ShiftLeft (n , 1 )で取得された値になります。

同様に、ShiftLeft (n , 2 )を見てみます。n = 5を2進数で表した「101」を左に 2 ビットずらすと得られる値は 2進数「10100」になります。この「1010」を10進数に変換した「20」の値が、ShiftLeft (n , 2 )で取得された値になります。

10進数 2進数
n 5 101
ShiftLeft (n , 1 ) ※左に 1 ビットシフト 10 1010
ShiftLeft (n , 2 ) ※左に 2 ビットシフト 20 10100

 

 

ShiftRight ・・・ 2進数を指定したビット分左にシフトした値を、十進数で返します

ShiftRight(n, b)

数値 n  を2進数に変換し、指定したビット分右にシフトした値を、十進数で返します。右シフト関数の結果は、数値 n の 2 の累乗による除算に相当します(算術シフト)。

 

Sample

下の例では、n 列に対してShiftRight関数を使っています。より分かりやすくするために、n 列の値、m 列の値、ShiftRightで返ってきた値を2進数で表した列も表示しています。

上の例の 1 レコード目では、n = 5 を入力して、ShiftRight(n , 1 )では 2 の値が、 ShiftRight (n , 2 )では 1 の値が返ってきました。詳しく見ていきます。

ShiftRight (n , 1 )から見てみます。n = 5を2進数で表すと「101」です。これを右に 1 ビットずらすと得られる値は 2進数「10」になります。この「10」を10進数に変換した「2」の値が、ShiftRight (n , 1 )で取得された値になります。

同様に、ShiftRight (n , 2 )を見てみます。n = 5を2進数で表した「101」を右に 2 ビットずらすと得られる値は 2進数「1」になります。この「1」を10進数に変換した「1」の値が、ShiftRight (n , 2 )で取得された値になります。

10進数 2進数
n 5 101
ShiftRight (n , 1 ) ※右に 1 ビットシフト 2 10
ShiftRight (n , 2 ) ※右に 2 ビットシフト 1 1

 

 

サンプルワークフロー ダウンロード

AlteryxFunctionSample__math_bit 

 

※Alteryx Designer 2019.1.6.58192時点の情報です

Alteryxの導入はぜひKCMEで!

セルフサービスデータ分析ツール「Alteryx」は4週間無償トライアルが可能です。

製品に対する操作方法、技術的な質問などは導入前・導入後に関わらずメールにてお答えします。また、Alteryxを用いた環境構築、開発、ヘルプデスク対応、ハンズオン、トレーニング、ワークフロー作成なども承りますので、お気軽にご相談ください。

おすすめの記事