Arduino статус бита
Есть ли способ проверить состояние бита в Arduino Uno?
Как в Atmel AVR, есть bit_is_clear или bit_is_set
@Joey, 👍2
Обсуждение3 ответа
Вы можете сделать это в одну строку:
bool isSet = (var & (1 << bitNumber)) != 0;
1 << bitNumber
— это битовый сдвиг, в данном случае это означает, что 1 будет умножена на степень 2
&
— это побитовый оператор И. Каждый бит результата равен 1 тогда и только тогда, когда оба соответствующих бита на входах равны 1.
Допустим, есть регистр с именем r1, и вы хотите что-то сделать, если его 6-й бит установлен в 1.
Вот два эквивалентных оператора if, оба делают одно и то же:
if(r1&64){Do something;}
if(r1&(1<<6)){Do something;}
Небольшая дополнительная информация о коде:
Допустим, вы хотите что-то сделать, если r1 = 01XX10XX00, где X означает, что вам все равно.
Вот три оператора if, которые делают одно и то же:
if((r1&0b11001100)==(0b01001000)){Do something;}
if((r1&0b11001100)==((1<<6) | (1<<3))){Do something;}
if((r1|0b00110011)==(0b01111011)){Do something;}
Если вы & (логическое и) где-то ставите 0, то вы устанавливаете этот бит в 0
Если вы | (логическое ИЛИ) где-то ставите 1, то вы устанавливаете этот бит в 1
Желаем удачи в ваших будущих начинаниях.
Arduino определяет функцию bit()
, которая позволяет легко выполнить if
:
if (val & bit(5)) { // Установлен ли бит 5?
// Сделай что-нибудь
} // если
Обратите внимание, что вам нужно использовать оператор битового И (&
), а не оператор логического И (&&
).
Если вы хотите проверить, очищен ли бит, вы можете использовать оператор not (!
), но тогда вам понадобятся скобки:
if (!(val & bit(5))) { // Бит 5 не установлен (сброшен)?
// Сделай что-нибудь
} // если
- Использование массивов, двоичных данных и битового чтения
- Изменение одного бита в байтовом массиве
- Как управлять выводом регистров сдвига по отдельности побитово
- Вывести 2 числа, хранящиеся в 24-битном формате, в десятичном формате.
- Как разделить двоичные данные, чтобы сформировать два разделенных двоичных данных?
- В MXCHIP IoT DevKit слишком много инициализаторов для unsigned char [0]
- Все ли эти битовые настройки означают одно и то же?
- Как использовать SPI на Arduino?
Если это Arduino на базе AVR, вы можете использовать
bit_is_clear()
иbit_is_set()
., @Edgar Bonet