Установить младший нулевой бит в 1

мое задание звучит так: Дано число, результатом является данное значение x, у которого младший нулевой бит установлен в 1. Я не могу разобраться, что имеется ввиду под "нулевым" битом. Например 100000......00011. Есть порядок заполнения биг ендиан. Тогда заполняется слева направо, как мы пишем. И младший бит получается 1 слева? Как я могу выполнить свое задание? Подойдет ли такой код? 1 x |= (1 << 0) `


Ответы (1 шт):

Автор решения: MBo

Младший нулевой бит в числе

 100000......00011
               ^  вот он

и не зависит от ендианности хранения.

Как его найти? Если без битовых трюков - то, например, сделать маску m = 1<<k и проверять

x & k

проходя значения k от нуля до разрядности числа (32, 64).

Как получился ноль - всё, нашли, можно установить данный бит в единицу

x |= m

Если использовать знания о битовой арифметике - т.н. битовые трюки:

Если у нас в младших разрядах есть серия единиц, предваряемая нулём, то при увеличении числа на единицу последовательно выполняется перенос, так что 011..11 превращается в 111..11. Выполнив побитовое ИЛИ с начальным числом, мы установим тот самый нужный бит, а остальные не изменятся

    v вот этот хотим установить в 1
  100111
 +     1
  101000 
| 100111
  101111
→ Ссылка