psilogic: (Default)
psilogic ([personal profile] psilogic) wrote2007-03-06 03:50 pm

C - прикол

Как быстро проверить, является ли число степенью двойки?
На входе дано беззнаковое целое ненулевой разрядности, допускающее все операции языка C для типа unsigned. На выходе должно быть bool.

Циклы, ясное дело, не приветствуются. Мой ответ пока заскринен.

[identity profile] phantomer.livejournal.com 2007-03-07 07:11 am (UTC)(link)
value = 8(dec) = 100(bin)

100 && (100 & 011) = false

Наверное имелось в виду: value && !(value & (value-1))

Но поюзанное свойство мне очень понравилось. Действительно, тольуо у степени двойки при декременте обнуляется старший бит. У прочих чисел он остаётся установленным. Респект.

[identity profile] psilogic.livejournal.com 2007-03-07 04:59 pm (UTC)(link)
Ахха, что-то типа того. Еще бы от логических операций типа "&&" уйти... это же условный переход по идее

[identity profile] phantomer.livejournal.com 2007-03-08 12:09 pm (UTC)(link)
Попарил моск. Без явного или косвенного сравнения не придумалось.

[identity profile] psilogic.livejournal.com 2007-03-08 03:24 pm (UTC)(link)
:))