【概要】
true | false は、Arduino(C/C++)において、ビット演算子 |(Bitwise OR)を用いて、論理値(Boolean)である true と false を演算する式です。この演算は、各値をビット単位で比較し、いずれかのビットが 1 であれば 1 を返す動作を行います。
Arduinoにおける true は内部的に 1、false は 0 として定義されているため、この演算は実質的に 1 | 0 を実行していることと同義です。
【仕様】
- 演算子:
|(Bitwise OR) - オペランド:
true: 論理真(数値として1)false: 論理偽(数値として0)- 戻り値:
true(数値として1) - データ型:
bool(またはコンパイラの実装に依存するint型へのプロモーション) - 計算順序: 左から右へ評価されるが、ビット演算子であるため短絡評価(Short-circuit evaluation)は行われない。
【技術的特徴】
論理演算子 || との比較
最も重要な違いは「短絡評価」の有無です。
– true || false (Logical OR): 左辺が true の場合、右辺の評価をスキップします。条件分岐の最適化に寄与します。
– true | false (Bitwise OR): 左辺の状態に関わらず、必ず両方のオペランドを評価します。ビット単位の操作を意図する場合に使用されます。
ハードウェアレベルの挙動
Arduino(AVR, ESP32, STM32等)のCPUレベルでは、この演算は「OR」命令(例: AVRの OR 命令)に直接マッピングされます。論理演算 || の場合は、条件分岐命令(BREQ 等)を介した処理となるため、実行パスが異なります。
【注意点】
- 短絡評価の欠如:
if (A | B)と記述した場合、Aが真であってもBの式が評価されます。もしBが関数呼び出しや副作用を伴う処理である場合、意図しない動作を招く可能性があります。 - 型変換:
bool型を|で演算すると、内部的にintにキャストされることがあります。ビットマスク操作と混同しないよう、論理判定には||を使用するのが標準的な作法です。 - リソース: 組み込みシステムにおいて、極端に複雑なビット演算をループ内で繰り返す場合、CPUサイクルへの影響を考慮する必要がありますが、単一の
true | falseは無視できる程度の負荷です。
【サンプルコード】
void setup() {
Serial.begin(9600);
}
void loop() {
bool val1 = true | false; // ビット演算: 1 | 0 = 1
bool val2 = true || false; // 論理演算: 短絡評価あり
Serial.print("Bitwise OR (true | false): ");
Serial.println(val1);
Serial.print("Logical OR (true || false): ");
Serial.println(val2);
delay(2000);
}
【活用例】
- ビットフラグの合成: 複数の状態フラグ(例:
0x01,0x02)を組み合わせて、現在のデバイス状態を判定する際のビットマスク操作。 - レジスタ操作: GPIO制御やタイマー設定において、特定のビットのみを立てる処理(例:
PORTB |= (1 << 5);)。 - ステータス確認: 複数のセンサー異常フラグのいずれかが立っているかを確認する際の、ビット演算による高速な状態集約。


コメント