Объясните что делает этот оператор
- Войдите на сайт для отправки комментариев
Чт, 22/08/2013 - 17:51
Столкнулся с незнокомым оператором |= 1 <<
if (digitalRead(_pin) == HIGH)
result |= 1 << i; // set subsequent bit
result типа byte
По идее должно происходить смещение по битам в байте.
Спасибо.
Эта конструкция выполняется в три этапа.
1)Вычисляется значение выражения "1 << i" (сдвинуть число 1 на ш битов влево), фактически получаем число в котором все биты нуллевые, а бит номер i - 1.
2)Выполняется побитовое "или" значения, хранящегося в result со значением, полученным в результате этапа 1. Фактически получаем число, в котором все бита, кробе бита i такие же как в result, а бит i установлен в 1.
3)Значение, полученное на этапе 2 записывается в переменную result.
Если говорить более "человеческим" языком - эта конструкция устанавливает в переменной result бит номер i в 1.
Ну, так оно и происходит.
Какой именно оператор вам не понятент? << или |= ?
Вот если будет так записанно
так понятней?
В переводе нет этих операторов. Смотретие в первоисточниках:
Arduino - Bitshift и |Arduino - BitwiseAnd
Вообщем - сделали у result-та i-тый бит единицей.
Ито тот же самый что и
Тоьлко bitSet - это "ардуинисто", а "result|=1<<i" - это как "настоящие С-шный микроконтрольщики" делают :)
Спасибо, ответ даже более чем подробный! Все встало на свои места.