c++ - 了解返回语句 (analogRead(A1) > 500 ? (1<<1) : 0)
问题描述
我正在开发一个 Arduino 项目,以便按顺序(4、3、1、2)打开多个开关。我已经能够找到一个可以工作的代码,但我很难理解正在发生的事情。
它是一个有意义的返回函数,但是“?” “:0”是我迷路的地方
这是代码
uint8_t readSwitches()
{
return (analogRead(A1) > 500 ? (1<<1) : 0)
| (analogRead(A2) > 500 ? (1<<2) : 0)
| (analogRead(A3) > 500 ? (1<<3) : 0)
| (analogRead(A4) > 500 ? (1<<4) : 0);
}
有人可以解释发生了什么吗
解决方案
它是所谓的ternary operator
并且是形式A ? B : C
并且是缩短的if-else
If(A)
然后B
其他 C
https://www.cprogramming.com/reference/operators/ternary-operator.html
所以这个return
语句的作用是
检查Ax
变量是否存在> 500
以及是否存在,设置某个位并将OR
它们按位排列在一起
推荐阅读
- java - 使用不同线程的 JAVA 多个“SingleThreadScheduledExecutor”
- reactjs - 如何将数据传递给新添加的数组元素组件
- powershell - 在 PowerShell 中用双引号分割字符串
- excel - 从网页中的表中提取特定单元格
- excel - 如何通过 VBA 宏基于单个单元格中的值突出显示重复值?
- spotfire - Spotfire 自定义表达式来计算中值的总和
- design-patterns - 单例模式和适配器模式一起使用
- excel - 开始日期、结束日期和今天日期之间的 excel 完成百分比
- php - Mailgun 通过 curl 忽略 CC/BCC
- python - 如何有效地选择降低与已知点的平均距离的点?