> (greater than) の解説と実装リファレンス
【概要】
> は、Arduino(C/C++)における比較演算子(Relational Operator)の一つであり、左辺の式(Operand 1)の値が右辺の式(Operand 2)の値よりも大きいかどうかを評価します。評価結果は論理値(Boolean)として返されます。組み込みシステムにおいては、センサーデータの閾値判定、タイマーのタイムアウト監視、状態遷移の条件分岐など、基本的な制御ロジックの根幹をなす演算子です。
【仕様】
- 構文:
expression1 > expression2 - 引数: 比較可能なデータ型(
int,long,float,double,char,unsigned各種) - 戻り値:
bool型- 左辺 > 右辺 の場合:
true(内部的には1) - 左辺 ≦ 右辺 の場合:
false(内部的には0)
- 左辺 > 右辺 の場合:
- 評価の性質: 比較演算は、比較対象が確定した時点で評価されます。
【技術的特徴】
- 命令レベルの挙動: コンパイラ(AVR-GCC等)によって、ターゲットマイコンのCPU命令(例:AVRの
CPやCPI命令)に変換されます。これはレジスタ内の値を比較し、ステータスレジスタ(フラグレジスタ)のキャリーフラグやゼロフラグを更新する処理として実行されます。 - 算術型変換(Arithmetic Conversion): 異なるデータ型(例:
intとfloat)を比較する場合、C++の型変換規則に従い、より精度の高い型へ自動的にキャストされます。 - Unsigned と Signed の比較: 符号あり型(
int)と符号なし型(unsigned int)を比較する場合、符号あり型が符号なし型に変換されます。この際、負の数値は非常に大きな正の数値として扱われるため、意図しない比較結果(例:-1 > 100がtrueと判定される)を招く注意が必要です。
【注意点】
- 浮動小数点数の精度:
floatやdouble型の比較において、演算誤差(丸め誤差)により、理論上等しいはずの値が微差によって「大きい」と判定されることがあります。精密な比較が必要な場合は、許容誤差(Epsilon)を設ける手法が推奨されます。 - オーバーフローの影響: 比較演算自体にはオーバーフローは発生しませんが、比較対象の値を計算する過程でオーバーフローが発生した場合、正しい比較結果が得られません。
- アトミック性: 基礎的なデータ型(
int,long等)の比較は、シングル命令または数命令の範囲で完結するため、通常はアトミックに実行されます。しかし、構造体や配列を直接比較することはできず、各メンバの比較を個別に記述する必要があります。
【サンプルコード】
// センサーの閾値判定を用いた基本的な実装例
const int LIGHT_THRESHOLD = 500; // 閾値
const int SENSOR_PIN = A0; // アナログ入力ピン
void setup() {
Serial.begin(9600);
}
void loop() {
int currentLight = analogRead(SENSOR_PIN);
// > 演算子を用いた条件分岐
if (currentLight > LIGHT_THRESHOLD) {
// 閾値を超えた場合の処理
Serial.println("Alert: Light level exceeded!");
}
delay(100);
}
【活用例】
- 閾値判定(Thresholding): 温度、湿度、加速度などのセンサー入力に対し、特定の動作を実行する境界値を設定する処理。
- 状態遷移(State Machine): タイマー変数が設定された経過時間を上回った際に、システムの状態を「待機」から「実行」へ移行させる条件判定。
- 安全装置(Fail-safe): モーターの回転数や電圧が規定の最大値を超えた際に、緊急停止命令を発行する監視ロジック。
- PWM制御のクリッピング: 計算されたデューティ比が最大値(255)を超えないか確認し、上限を制限する処理の基礎として利用。


コメント