Arduino и Bitwise, неожиданный результат - PullRequest
5 голосов
/ 21 июня 2011

Здесь я немного запутался.

Я хотел бы проверить, содержит ли набор бит (3 бита) бит в определенной позиции.

if (B110 & B010 == B010)

(B110 - номер для проверки, B010 - бит, который я хочу увидеть, если есть)

Приведенный выше код не дает ожидаемого результата, оба B110верно, а B101 - правда.Я уверен, что мне нужно использовать & (и) для проверки с маской B010.

Насколько я понимаю, B110 и B010 будут равны B010, а B101 и B010 равны B000.Но мой оператор if выполняется с обоими тестовыми битами?

Я кодирую в Arduino, я уверен, что это простое недоразумение от моего имени, но не уверен, где.

Ответы [ 2 ]

12 голосов
/ 21 июня 2011

Попробуйте if ((B110 & B010) == B010)

В данный момент он работает как if (B110 & (B010 == B010)), что всегда будет верным.

Как эта таблица показывает, == и ! = имеют более высокий приоритет, чем & , | и т. Д.

3 голосов
/ 21 июня 2011

"== B010" на самом деле не требуется в этом тесте.В C 0 представляет «ложь», а любое ненулевое значение считается «истиной».B110 & B010 (или любое другое значение с установленным этим битом) вернет B010, что не равно 0, поэтому проверка прошла успешно.

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