Требуется пояснение для некоторых строк программы из жидкокристаллической программы LCD - PullRequest
1 голос
/ 15 мая 2019

Может кто-нибудь объяснить, с чем будет сравниваться ретваль (побитовое ИЛИ) в конце? Я не понимаю эту строку программы

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

1 Ответ

1 голос
/ 15 мая 2019

Обобщено, 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 сам по себе ни с чем не сравнивается.Вместо этого его предыдущее значение используется с побитовым ИЛИ, и результат этого присваивается обратно retval.

И если мы переписываем условное выражение в оператор if else, это будет похоже на

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

Надеюсь, это будет намного легче понять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...