OR(論理和)演算子|は2つの整数の間で使われます。
OR演算子は値の各ビットに対して個別に、次のようなルールで計算を行います。
・どちらのビットも1なら1
・どちらか一方が1のときも1
・どちらも0のときは0
0011 値1
0101 値2
-------
0111 (値1|2)
int a = 92; //二進数の0000 0000 0101 1100
int b =101; //二進数の0000 0000 0110 0101
int c = a|b; //計算結果0000 0000 1111 1101(十進数の125)
[例]
ビット演算子ANDとORは、
ポートに対するRead Modify Writeと呼ばれる処理によく使われます。
マイクロコントローラのポートはピンの状態を示す8ビットの数値で表されます。
ポートに対して(数値を)書き込む事で、それらのピンをコントロール出来ます。
PORTDはデジタルピン0~7の出力の状態を参照する為の組み込み定数です。
あるビットが1だとすると、そのピンはHIGHです。
(そのピンはあらかじめpinModeでOUTPUTに設定されている必要があります)
さて、試しにPORTD = B10001100と書き込んでみましょう。
ピン2,3,7がHIGHになりましたが、ここで一つ引っかかる事があります。
この処理によって、Arduinoがシリアル通信に使うピン0と1の状態まで
変えてしまったかもしれません。
そうすると、シリアル通信に悪影響がでます。
[アルゴリズム]
・PORTDの状態を取得してコントロールしたいピンに一致するビットだけをクリア
・変更されたPORTDの値と新しい値を結びつける