Установить младший нулевой бит в 1
мое задание звучит так: Дано число, результатом является данное значение x, у которого младший нулевой бит установлен в 1. Я не могу разобраться, что имеется ввиду под "нулевым" битом. Например 100000......00011. Есть порядок заполнения биг ендиан. Тогда заполняется слева направо, как мы пишем. И младший бит получается 1 слева? Как я могу выполнить свое задание? Подойдет ли такой код? 1 x |= (1 << 0) `
Ответы (1 шт):
Младший нулевой бит в числе
100000......00011
^ вот он
и не зависит от ендианности хранения.
Как его найти? Если без битовых трюков - то, например, сделать маску m = 1<<k и проверять
x & k
проходя значения k от нуля до разрядности числа (32, 64).
Как получился ноль - всё, нашли, можно установить данный бит в единицу
x |= m
Если использовать знания о битовой арифметике - т.н. битовые трюки:
Если у нас в младших разрядах есть серия единиц, предваряемая нулём, то при увеличении числа на единицу последовательно выполняется перенос, так что 011..11 превращается в 111..11. Выполнив побитовое ИЛИ с начальным числом, мы установим тот самый нужный бит, а остальные не изменятся
v вот этот хотим установить в 1
100111
+ 1
101000
| 100111
101111