C - прикол
Как быстро проверить, является ли число степенью двойки?
На входе дано беззнаковое целое ненулевой разрядности, допускающее все операции языка C для типа unsigned. На выходе должно быть bool.
Циклы, ясное дело, не приветствуются. Мой ответ пока заскринен.
На входе дано беззнаковое целое ненулевой разрядности, допускающее все операции языка C для типа unsigned. На выходе должно быть bool.
Циклы, ясное дело, не приветствуются. Мой ответ пока заскринен.
no subject
no subject
100 && (100 & 011) = false
Наверное имелось в виду: value && !(value & (value-1))
Но поюзанное свойство мне очень понравилось. Действительно, тольуо у степени двойки при декременте обнуляется старший бит. У прочих чисел он остаётся установленным. Респект.
no subject
no subject
no subject
no subject
Соответственно !( x & (x - 1) ) - в числе нет битов, кроме младшего, что нам и требуется
no subject
осталось исправить баг: ноль - не степень двойки, а он под эту формулу подходит
no subject
!( x & (x - 1) ) && x
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
Оставляем первый бит получаем нечетное число,
не_нечетно => четное