Ben Eater(youtuber)使用了我在任何地方都找不到的 arduino 表达式。它是什么?

Ben Eater (youtuber) used an arduino expression that I can't find anywhere. What is it?

在 youtuber Ben Eater 的视频 [“Hello, world” from scratch on a 6502 — Part 1] 中,他在视频的 10 分 30 秒处展示了一行代码,其中使用了我根本找不到的表达式.

我试过在arduino文档网站上找到它,试着直接搜索它,我也没有在Whosebug上找到它...这是代码:

const char ADDR[]={22, 24, 26...} // these are pins in the Arduino Mega

void setup() {
    for (int n = 0; n < 16; n += 1) {
        pinMode(ADDR[n], INPUT);
    }
    Serial.begin(57600);
}

void loop() {
    for (int n = 0; n < 16; n +=1) {
        int bit = digitalRead(ADDR[n]) ? 1 : 0;
        Serial.print(bit);
    }
    Serial.println();
}

在代码行中 int bit = digitalRead(ADDR[n]) ? 1 : 0; 是我在其他任何地方都没有见过的表达式。它应该意味着 如果 digitalRead(ADDR[n]) 为真则添加 1 如果不添加 0 然后将其分配给整数变量位。 我还没有看到 ? True : False 表达式在其他任何地方,我想知道它的引用在哪里以及在哪里使用它以及类似的东西。我都不知道它叫什么!

谢谢您的回答!我仍在学习,我认为这些技巧会对我有很大帮助。

C++ 中的表达式由操作数和运算符组合而成。

可以在 C++ 参考中找到运算符的作用。

这是条件运算符或三元运算符。它基本上是一个简短的 if else.

(expression 1) ? expression 2 : expression 3

如果 expression 1true,则计算 expression 2。如果 expression 1false,则计算 expression 3

int bit = digitalRead(ADDR[n]) ? 1 : 0;

1 分配给 bit if digitalRead(ADDR[n]) returns HIGH and 0 else.

这个表达式没有任何意义,因为 digitalRead 无论如何都会 return 10

int bit = digitalRead(ADDR[n]); 做同样的事情

他误认为 digitalRead return 是一个布尔值。它 return 是一个整数。

https://github.com/arduino/ArduinoCore-avr/blob/60f0d0b125e06dbf57b800192c80e5f60d681438/cores/arduino/wiring_digital.c#L165

即使 digitalRead 会 return 布尔值,false 的计算结果为 0,true 的计算结果为 1,因此将其存储为整数绝对没有问题。它会隐式转换为整数,并且值不会改变。