Arduino - 运算符
Arduino - 编程运算符
Section titled “Arduino - 编程运算符”运算符是特殊符号,它们指示编译器执行特定的数学、关系或逻辑运算。由于 Arduino 编程基于 C++,因此它使用标准的 C++ 运算符。本指南为每种类型提供了实用、可运行的示例。
运行这些示例: 将代码复制到 Arduino IDE 中,上传到您的开发板,并以 9600 的波特率打开串口监视器(工具 > 串口监视器)。
1. 算术运算符
Section titled “1. 算术运算符”这些运算符用于执行数学计算。
| 运算符 | 名称 | 描述 |
|---|---|---|
| = | 赋值 | 将右侧的值赋给左侧的变量。 |
| + | 加法 | 将两个操作数相加。 |
| - | 减法 | 从第一个操作数中减去第二个操作数。 |
| * | 乘法 | 将两个操作数相乘。 |
| / | 除法 | 将第一个操作数除以第二个。 |
| % | 取模 | 返回整数除法的余数。 |
void setup() { Serial.begin(9600);
int a = 10; int b = 3;
Serial.print("a = 10, b = 3\n"); Serial.print("a + b = "); Serial.println(a + b); // 结果: 13 Serial.print("a - b = "); Serial.println(a - b); // 结果: 7 Serial.print("a * b = "); Serial.println(a * b); // 结果: 30 Serial.print("a / b = "); Serial.println(a / b); // 结果: 3 (整数除法,舍弃余数) Serial.print("a % b = "); Serial.println(a % b); // 结果: 1 (10/3 的余数)
// 对于浮点数除法: float x = 10.0; float y = 3.0; Serial.print("x / y = "); Serial.println(x / y); // 结果: 3.33}
void loop() {}2. 比较运算符
Section titled “2. 比较运算符”这些运算符比较两个值并返回布尔结果(true 或 false)。它们最常用于 if 等条件语句中。
| 运算符 | 名称 | 描述 |
|---|---|---|
| == | 等于 | 如果操作数相等则返回 true。 |
| != | 不等于 | 如果操作数不相等则返回 true。 |
| < | 小于 | 如果左操作数小于右操作数则返回 true。 |
| > | 大于 | 如果左操作数大于右操作数则返回 true。 |
| <= | 小于或等于 | 如果左操作数小于或等于右操作数则返回 true。 |
| >= | 大于或等于 | 如果左操作数大于或等于右操作数则返回 true。 |
void setup() { Serial.begin(9600);
int sensorValue = 750; int threshold = 500;
Serial.print("Sensor Value: "); Serial.println(sensorValue); Serial.print("Threshold: "); Serial.println(threshold);
if (sensorValue > threshold) { Serial.println("结果: 传感器值大于阈值。"); }
if (sensorValue == 750) { Serial.println("结果: 传感器值恰好为 750。"); }}
void loop() {}3. 布尔运算符
Section titled “3. 布尔运算符”这些运算符用于组合多个条件表达式。
| 运算符 | 名称 | 描述 |
|---|---|---|
| && | 逻辑与 | 仅当两个操作数都为 true 时才返回 true。 |
| || | 逻辑或 | 如果至少一个操作数为 true 则返回 true。 |
| ! | 逻辑非 | 反转其操作数的布尔值(true 变为 false,false 变为 true)。 |
void setup() { Serial.begin(9600);
int temperature = 25; int humidity = 50;
// 示例 1:与 if (temperature >= 20 && humidity < 60) { Serial.println("条件 1:温度宜人且湿度正常。"); }
// 示例 2:或 if (temperature > 30 || humidity > 80) { Serial.println("条件 2:要么太热,要么太湿。"); }
// 示例 3:非 bool isRaining = false; if (!isRaining) { Serial.println("条件 3:没有下雨。"); }}
void loop() {}4. 位运算符
Section titled “4. 位运算符”位运算符对整数数据类型的单个位进行操作。它们效率很高,常用于低级微控制器编程中,以操作硬件寄存器。
| 运算符 | 名称 | 描述 |
|---|---|---|
| & | 按位与 | 如果两个对应的位都为 1,则将每个位设置为 1。 |
| | | 按位或 | 如果至少一个对应的位为 1,则将每个位设置为 1。 |
| ^ | 按位异或 | 如果只有一个对应的位为 1,则将每个位设置为 1。 |
| ~ | 按位非 | 反转所有位。 |
| << | 左移 | 将位向左移动,用零填充。(快速乘以 2)。 |
| >> | 右移 | 将位向右移动。(快速整数除以 2)。 |
// 一个字节是 8 位。B00000001 是数字 1 的二进制表示。byte flags = B00000001;
void setup() { Serial.begin(9600);
// 用例 1:使用 OR 设置位(打开标志) // 让我们设置第 3 位(位 2) flags = flags | B00000100; // 结果: B00000101 Serial.print("After setting bit 2: "); Serial.println(flags, BIN);
// 用例 2:使用 AND 检查位 // 位 2 仍然设置了吗? if ((flags & B00000100) > 0) { Serial.println("位 2 已开启。"); }
// 用例 3:使用 XOR 切换位 // 让我们切换第 1 位(位 0) flags = flags ^ B00000001; // 结果: B00000100 Serial.print("After toggling bit 0: "); Serial.println(flags, BIN);
// 用例 4:左移 byte val = B00001100; // 12 Serial.print("12 << 1 = "); Serial.println(val << 1); // 24}
void loop() {}5. 复合运算符
Section titled “5. 复合运算符”复合运算符是对变量执行操作并将新值重新赋值给同一变量的简写形式。
| 简写 | 等效于 | 名称 |
|---|---|---|
| x++ | x = x + 1 | 递增 |
| x— | x = x - 1 | 递减 |
| x += y | x = x + y | 复合加法 |
| x -= y | x = x - y | 复合减法 |
| x *= y | x = x * y | 复合乘法 |
| x /= y | x = x / y | 复合除法 |
void setup() { Serial.begin(9600);
int counter = 0; counter++; // counter 现在是 1 Serial.print("Counter after ++: "); Serial.println(counter);
int score = 100; score -= 20; // score 现在是 80 Serial.print("Score after -= 20: "); Serial.println(score);}
void loop() {}