psilogic: (Default)
[personal profile] psilogic
Как быстро проверить, является ли число степенью двойки?
На входе дано беззнаковое целое ненулевой разрядности, допускающее все операции языка C для типа unsigned. На выходе должно быть bool.

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

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

100 && (100 & 011) = false

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

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

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

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

Date: 2007-03-08 03:24 pm (UTC)
Page generated Aug. 22nd, 2025 02:45 pm
Powered by Dreamwidth Studios