реклама на сайте
подробности

 
 
> Как с помощью #define определить позицию бита
ViKo
сообщение Aug 28 2014, 12:38
Сообщение #1


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Хочу, например, для числа 0x0100 найти позицию бита, который в 1, то есть, получить число 8.
В-принципе, этот бит будет один (младший бит в группе), но если их несколько, нужно определить позицию младшего.
Как это сделать макрофункцией?
Тогда я смогу задавать сдвиг "магических чисел" в регистре по имени группы битов в этом регистре.
P.S. Обратная функция легко делается сдвигом 1 << NUM.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Aug 28 2014, 20:26
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Правильно ли я понял: допустим у вас есть
Код
#define MASK 0x000FF0
И вы хотите из этого MASK получить 4 чтобы сделать Reg = N << 4;

Можно сделать (я делаю) так:
Код
Reg = N * (MASK & -MASK);


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
ViKo
сообщение Aug 28 2014, 21:10
Сообщение #3


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Сергей Борщ @ Aug 28 2014, 23:26) *
Правильно ли я понял:...

Да, правильно. Спасибо! Супер.
И ведь видел когда-то... rolleyes.gif
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th July 2025 - 23:57
Рейтинг@Mail.ru


Страница сгенерированна за 0.0138 секунд с 7
ELECTRONIX ©2004-2016