説明
C++ のビットごとの AND 演算子です。
2 つの整数式の間にも使用 &を使用してANDを取ります。
ビットごとの AND は、周囲の式の各ビット位置を、次のルールに従って独立して操作します入力ビットが両方とも 1 の場合、結果の出力は 1、そうでない場合は 0 です。
0 0 1 1 operand1 0 1 0 1 operand2 ---------- 0 0 0 1 (operand1 & operand2) - returned result
Arduinoではint型は16ビットの値なので、2つのint型の式の間に&を使うと、16回のAND演算が同時に行われます。
コード例
コードフラグメントでは
int a = 92; // in binary: 0000000001011100 int b = 101; // in binary: 0000000001100101 int c = a & b; // result: 0000000001000100, or 68 in decimal.
aとbの16ビットがそれぞれビットワイズANDで処理され、結果の16ビットすべてがcに格納され、2進法では01000100、10進法では68という値になります。
ビットごとのANDの最も一般的な使用法の一つは、整数値から特定のビット(または複数のビット)を選択することで、しばしばマスキングと呼ばれます。以下に例を示します(AVRアーキテクチャ固有)。
PORTD = PORTD & 0b00000011; // clear out bits 2 - 7, leave pins PD0 and PD1 untouched (xx & 11 == xx)