有人可以解释一下最终将把retval与(按位或)进行比较吗?我不明白这行程序
for (int i = 0; i < n; i++) {
retval |= (digitalRead(_data_pins[i]) == HIGH)?(1 << i):0;
}
答案 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;
希望这应该更容易理解。