Skip to content

Arduino - 运算符

运算符是特殊符号,它们指示编译器执行特定的数学、关系或逻辑运算。由于 Arduino 编程基于 C++,因此它使用标准的 C++ 运算符。本指南为每种类型提供了实用、可运行的示例。

运行这些示例: 将代码复制到 Arduino IDE 中,上传到您的开发板,并以 9600 的波特率打开串口监视器(工具 > 串口监视器)。

这些运算符用于执行数学计算。

运算符名称描述
=赋值将右侧的值赋给左侧的变量。
+加法将两个操作数相加。
-减法从第一个操作数中减去第二个操作数。
*乘法将两个操作数相乘。
/除法将第一个操作数除以第二个。
%取模返回整数除法的余数。
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() {}

这些运算符比较两个值并返回布尔结果(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() {}

这些运算符用于组合多个条件表达式。

运算符名称描述
&&逻辑与仅当两个操作数都为 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() {}

位运算符对整数数据类型的单个位进行操作。它们效率很高,常用于低级微控制器编程中,以操作硬件寄存器。

运算符名称描述
&按位与如果两个对应的位都为 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() {}

复合运算符是对变量执行操作并将新值重新赋值给同一变量的简写形式。

简写等效于名称
x++x = x + 1递增
x—x = x - 1递减
x += yx = x + y复合加法
x -= yx = x - y复合减法
x *= yx = x * y复合乘法
x /= yx = 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() {}