使用按位运算符检查整数是否为2 ^ 1-2 ^ j的单行

mis*_*tor 2 language-agnostic bit-manipulation bitwise-operators

我想要一行代码来检查给定的整数是否为2 i - 2 j或NOT.(使用按位运算符)

Bri*_*ell 6

正如AndreyT所说,答案可以在Hacker's Delight中找到:

使用以下公式关闭最右边的1位连续字符串(例如,01011000⇒01000000):

((x | (x – 1)) + 1) & x
Run Code Online (Sandbox Code Playgroud)

这可以用于以查看是否为非负整数的形式2的Ĵ - 2 ķ一些Ĵķ ≥0; 应用公式,然后对结果进行0检验.

(正在讨论是否发布这个,因为它是一个家庭作业问题,但正如AndreyT已经提到它并且它很容易Googlable,我认为直接引用更有帮助;我会让提问者处理接受帮助的伦理含义家庭作业,我希望如果他的答案取决于此,他会写下自己如何运作的解释)