CC++Qt « Превратить самый правый нулевой бит числа в единицу без циклов и рекурсии
Дано двоичное представление числа. И необходимо написать алгоритм (на C++, желательно), позволяющий превратить самый правый нулевой бит двоичного представления числа в 1. Нельзя использовать рекурсию и циклы.
примеры:
вход:
1000101
выход:
1000111
вход
1011111
выход:
1111111
примеры:
вход:
1000101
выход:
1000111
вход
1011111
выход:
1111111
1 ответов
Это должно сработать:
x |= x+1;
В x+1 занулятся все младшие ("правые") биты числа + младший нулевой станет 1
Тогда при операции |
- все биты старше младшего нулевого останутся неизменными
- младший нулевой бит станет 1 (так как он 1 в x+1)
- младшие единицы останутся единицами т.к. они были единицами в x