C - прикол
Mar. 6th, 2007 03:50 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Как быстро проверить, является ли число степенью двойки?
На входе дано беззнаковое целое ненулевой разрядности, допускающее все операции языка C для типа unsigned. На выходе должно быть bool.
Циклы, ясное дело, не приветствуются. Мой ответ пока заскринен.
На входе дано беззнаковое целое ненулевой разрядности, допускающее все операции языка C для типа unsigned. На выходе должно быть bool.
Циклы, ясное дело, не приветствуются. Мой ответ пока заскринен.
no subject
Date: 2007-03-07 07:11 am (UTC)100 && (100 & 011) = false
Наверное имелось в виду: value && !(value & (value-1))
Но поюзанное свойство мне очень понравилось. Действительно, тольуо у степени двойки при декременте обнуляется старший бит. У прочих чисел он остаётся установленным. Респект.
no subject
Date: 2007-03-07 04:59 pm (UTC)no subject
Date: 2007-03-08 12:09 pm (UTC)no subject
Date: 2007-03-08 03:24 pm (UTC)