Преобразование битового числа в байтовое значение (AVR Docs)
Мне трудно понять, что говорит мне этот документ: https://www.microchip.com/webdoc /AVRLibcReferenceManual/FAQ_1faq_use_bv.html
У меня есть макрос с именем _BV
, который
преобразование битового числа (обычно в байтовом регистре) в байтовое значение
И пример говорит об этом
_BV(3) => 1 << 3 => 0x08
Я вроде как привык к битам, байтам и т. д. Но я не понимаю, что такое 3 в этом примере? Он говорит, что преобразует битовое число, но 3 не является двоичным, это целое число. И макрос преобразует его в 0x08, что соответствует десятичному значению 8.
Я очень запутался. Надеюсь, кто-нибудь объяснит мне, что здесь происходит!
@xetra11, 👍1
Обсуждение1 ответ
Лучший ответ:
Биты внутри байта нумеруются от 0 до 7 справа налево. крайний правый (наименее значащий) бит 0, следующий бит 1... и самый левый (самый значащий) бит 7.
Выражение _BV(3)
создает байт, в котором бит 3 установлен (равен 1) и все
остальные биты свободны (равны 0). В двоичном виде это выглядит так:
position: 7 6 5 4 3 2 1 0
bit value: 0 0 0 0 1 0 0 0
Макрос заменяется на 1<<3
, который принимает целое число 1 (0b00000001 в
двоичный) и сдвигает все свои биты на три позиции влево.
результат может быть записан как 0b00001000 в двоичном формате, 0x08 в шестнадцатеричном и 8
в десятичном формате.
и имейте в виду @xetra11, что в этом случае шестнадцатеричное число и десятичное число совпадают только по совпадению. Если бы бит 4 был установлен в 1 вместо бита 3, это было бы 0x10 в шестнадцатеричном и 16 в десятичном! Может быть полезно учитывать, что все десятичные числа имеют «основание 10» (отсюда и слово DEC-imal). Но двоичные числа имеют основание «2», а шестнадцатеричные числа — это основание 16. Основание -1 — это наибольшее число, которое может быть в «цифре», прежде чем должен произойти перенос для представления числа. Для шестнадцатеричного, чтобы иметь 16 цифр, он идет от 0 до 9, за которым следует AF., @Randy
- Хорошие способы подключения нескольких шин I2C?
- NRF51822 ± Arduino Uno/ATmegaXXX?
- Сохранять 5В во время сна с библиотекой низкой мощности
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
- Запрограммировать ATMega328P и использовать его без платы Arduino.
- Как получить исходные файлы для библиотек Arduino?
- Ошибка: "недопустимое использование нестатической функции-члена" при вызове функции из моего собственного класса-метода
- Не удается снова загрузиться после смены платы
когда вы видите 0x08, не думайте "десятичное"... думайте "шестнадцатеричное" ..... шестнадцатеричные числа легко преобразуются в двоичные ..... например, 0x98 совпадает с 0b10011000, @jsotola