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

 
 
> Как с помощью #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
Ответов
ViKo
сообщение Aug 29 2014, 10:04
Сообщение #2


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

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



Если описать конкретно младший бит в группе, то можно пользоваться тем же умножением, что я и сам делаю ( lol.gif показывал в другой теме). Только сомножители местами переставлены. rolleyes.gif

Код
Reg |= N * MASK_0;


Компилятор все эти умножения на сдвиги заменяет, естественно.

Цитата(SSerge @ Aug 28 2014, 18:14) *
Есть такой алгоритм, приличный С-компилятор должен это вычислить во время компиляции
...
Плюс в том, что это макроопределение можно использовать прямо внутри выражения.

Да, спасибо, макро работает, компилируется в число.
Go to the top of the page
 
+Quote Post



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

 


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


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