CC++Qt « Превратить самый правый нулевой бит числа в единицу без циклов и рекурсии

Дано двоичное представление числа. И необходимо написать алгоритм (на C++, желательно), позволяющий превратить самый правый нулевой бит двоичного представления числа в 1. Нельзя использовать рекурсию и циклы.

примеры:
вход:
1000101

выход:
1000111


вход
1011111

выход:
1111111

1 ответов


Это должно сработать:


x |= x+1;
 
В x+1 занулятся все младшие ("правые") биты числа + младший нулевой станет 1
Тогда при операции |
  • все биты старше младшего нулевого останутся неизменными
  • младший нулевой бит станет 1 (так как он 1 в x+1)
  • младшие единицы останутся единицами т.к. они были единицами в x