битовые операции ( проверить бит)
- Войдите на сайт для отправки комментариев
Пт, 03/11/2017 - 00:54
имею шеснадцатиричное значение например '6F' мне нужно проверить в нем бит или группу битов, равны ли они единице или нет. как это реализовать по грамотному?
имею шеснадцатиричное значение например '6F' мне нужно проверить в нем бит или группу битов, равны ли они единице или нет. как это реализовать по грамотному?
Проверка N-ного бита:
Проверка бит по маске - аналогично:
имею шеснадцатиричное значение ... как это реализовать по грамотному?
"По-грамотному" - не говорить "имею шеснадцатиричное значение", т.к. Вы его не имеете, а лишь представляете себе.
Так маску прикольней задавать:
Для отдельного бита Ардуиновцы придумали макрос bitRead(value, bit), но пользоваться им или нет - вопрос философский.
я пользуюсь таким кодом, вроде работает. Но вдруг есть косяки, проверьте.
Проверка N-ного бита:
В глубинах ардуины определен макрос bit_is_set. Он собственно и раскрутится в то что Вы написали. Потому проще так.
if(bit_is_set(value,N)) {
Есть еще bitRead(value, N)
А я с вычитанием бита из байта не понял. Может быть не вычитание а вычленение?
вЫчитать, а не вычитАть. Типа считать бит из байта
исправил
Почему
вторая и третья строка выдает в ответ число 16 при лог единице на входе?
подаю ноль, потом единицу на PIND.4 Терминал:
p-a-h-a, вам нужно чётко различать логическое состояние бита и "вес" бита. Любой ненулевой вес это и есть логическая единица.
вторая и третья строка выдает в ответ число 16 при лог единице на входе?
Пин 4-ый, 24 = 16. Правильно выдаётся. А Вы чего хотели?
Как правильно получить единицу?
Ну есть 100500 способов. Например
или
Можно ещё с десяток вариантов набросать.
Только использование для чтения PORTx - не самое очевидное решение. Обычно используют PINx. Надеюсь, Вы знаете, что делаете.
Спасибо dimax, то о чем догадывался подтвердилось.
ЕвгенийП Спасибо за примеры. И да, совершенно верно, PIN. PORT из другой темы был взят. Я вообще был в поисках состояния бита регистра или переменной а наткнулся на тему с портом.
Всем привет. подскажите как Это правильно сделать в языке Си
ругань, видимо, секретная?
У вас кавычки в Printf не стандартные. Наверное копировали? Исправьте из вручную.