首页 > 解决方案 > 了解返回语句 (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);
}

有人可以解释发生了什么吗

标签: c++arduino

解决方案


它是所谓的ternary operator 并且是形式A ? B : C并且是缩短的if-else

If(A) 然后B 其他 C

https://www.cprogramming.com/reference/operators/ternary-operator.html

所以这个return语句的作用是

检查Ax变量是否存在> 500以及是否存在,设置某个位并将OR它们按位排列在一起


推荐阅读