【问题标题】:Understanding the return statement (analogRead(A1) > 500 ? (1<<1) : 0) [duplicate]了解返回语句 (analogRead(A1) > 500 ? (1<<1) : 0) [重复]
【发布时间】:2021-12-15 13:38:22
【问题描述】:

我正在开发一个 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


【解决方案1】:

这是一个所谓的ternary operator 格式为A ? B : C,是if-else的缩写

If(A) 然后B 否则C

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

那么return 语句的作用是

检查Ax 变量是否为&gt; 500,如果是,则将某个位和OR 按位设置在一起

【讨论】:

  • 检查 Ax 变量是否 > 500 ...
  • ...如果是,则每个运算符分别返回 2、4、8 和 16,否则返回 0 ...
猜你喜欢
  • 2017-11-28
  • 1970-01-01
  • 2015-10-11
  • 1970-01-01
  • 2020-11-03
  • 2019-09-18
  • 2019-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多