LCD液晶程序的某些程序行需要说明

时间:2019-05-15 14:23:24

标签: c++ utf-8 arduino 3d

有人可以解释一下最终将把retval与(按位或)进行比较吗?我不明白这行程序

for (int i = 0; i < n; i++) {
    retval |= (digitalRead(_data_pins[i]) == HIGH)?(1 << i):0;
  }

1 个答案:

答案 0 :(得分:1)

广义上,a |= b等于a = a | b

对于您的代码,表达式

retval |= (digitalRead(_data_pins[i]) == HIGH)?(1 << i):0;

等于

retval = retval | (digitalRead(_data_pins[i]) == HIGH)?(1 << i):0;

也就是说,retval本身并未与任何事物进行比较。取而代之的是,它的先前值与按位OR一起使用,并且其结果被分配回retval

如果我们将条件表达式重写为if else语句,那将是

if (digitalRead(_data_pins[i]) == HIGH)
    retval = retval | (1 << i);
else
    retval = retval | 0;

希望这应该更容易理解。