Arduino статус бита

Есть ли способ проверить состояние бита в Arduino Uno?

Как в Atmel AVR, есть bit_is_clear или bit_is_set

, 👍2

Обсуждение

Если это Arduino на базе AVR, вы можете использовать bit_is_clear() и bit_is_set()., @Edgar Bonet


3 ответа


5

Вы можете сделать это в одну строку:

bool isSet = (var & (1 << bitNumber)) != 0;

1 << bitNumber — это битовый сдвиг, в данном случае это означает, что 1 будет умножена на степень 2

& — это побитовый оператор И. Каждый бит результата равен 1 тогда и только тогда, когда оба соответствующих бита на входах равны 1.

,

2

Допустим, есть регистр с именем 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


Желаем удачи в ваших будущих начинаниях.

,

0

Arduino определяет функцию bit(), которая позволяет легко выполнить if:

if (val & bit(5)) { // Установлен ли бит 5?
    // Сделай что-нибудь
} // если

Обратите внимание, что вам нужно использовать оператор битового И (&), а не оператор логического И (&&).

Если вы хотите проверить, очищен ли бит, вы можете использовать оператор not (!), но тогда вам понадобятся скобки:

if (!(val & bit(5))) { // Бит 5 не установлен (сброшен)?
    // Сделай что-нибудь
} // если
,