Как говорит АндрейT, ответ можно найти в Восторг Хакера :
Используйте следующую формулу, чтобы отключить самую правую непрерывную строку из 1 бита (например, 01011000⇒ 01000000):
((x | (x – 1)) + 1) & x
Это можно использовать, чтобы увидеть, имеет ли неотрицательное целое число форму 2 j - 2 k для некоторых j ≥ k ≥ 0;примените формулу с последующим 0-тестом результата.
(обсуждала, стоит ли публиковать это, так как это домашнее задание, но, как уже упоминал AndreyT, и это легко Googlable, думаю, этоболее полезно цитировать непосредственно: я позволю спрашивающему разобраться с этическими последствиями принятия помощи в выполнении домашней работы, и я ожидаю, что, если от этого зависит его ответ, он сам напишет объяснение того, как она работает)