Re: Алгоритм чтения LSB-bit
От: Zhendos  
Дата: 18.12.24 10:38
Оценка: +1
Здравствуйте, Vladimir, Вы писали:

V>Подскажите алгоритм оптимального чтения LSB num бит.

V>Есть число 11110000 = F0. Необходимо прочитать справа налево num bit, начиная с first.
V>Например: first = 2, num = 5, читаем 00111 = 7.
V>Меня смущает цикл for и оператор if.

Не очень понял смысл цикла, если нужно со 2 по 5 бит, то просто
сдвигаем биты к началу и накладываем маску, что-то типа:

(value >> (first + 1)) & ((1 << (num- 1)) - 1)


V>Первое что приходит:
V>int v = 0;
V>for (int i = first; i < num + first; i++)
V>  v = (v << 1) + (value & (1 << i)) ? 1 : 0;


Кстати в коде ошибка из-за приоритета операторов,
нужно в скобки обернуть выражение "(value & (1 << i)) ? 1 : 0",
чтобы все правильно считалось.

Плюс вполне возможно UB из-за работы с потенциально отрицательными
числами, лучше конечно использовать "unsigned int" в битовой арифметике.
Отредактировано 18.12.2024 10:40 Zhendos . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.