Как преобразовать определенные биты в числе?

Не понимаю, как в не известном заранее числе преобразовать заданные биты.

Например число 115 в двоичном виде 1110011.
Хотим сделать единичками 3 бита слева от второй позиции.

Для этого мы должны применить операцию ИЛИ: res = 1110011 | 0011100

А вот если само число, позиция и кол-во битов задается динамически, как подбирать числа?
  • Вопрос задан
  • 917 просмотров
Решения вопроса 1
Mrrl
@Mrrl
Заводчик кардиганов
Если номер позиции pos, число разрядов len, а число, которое надо изменить - x, то ответом будет
x | (((1 << len) - 1) << pos)
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
gbg
@gbg
Баянист. Тамада. Услуги.
Генерировать числа, которые в двоичной системе счисления соответствуют нужным.
Например, чтобы установить 1 в n разряде числа, можно использовать сдвиг:
a = 1 << n;
Ответ написан
slinkinone
@slinkinone
Агент "Везде успеть"
Можно взять единицу (var1 = 00000001), применить | (битовое или), то получим 1 в первом бите, побитовый сдвиг влево к var1 - получим (00000010) и также применим | к нужному числу.

Очень хорошая статья:
chipenable.ru/index.php/programming-avr/item/4-uch...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы