查找数字是否为2的幂

Kar*_*tik 20 php

出于好奇,如何在不使用递归的情况下判断数x是2的幂(x = 2 ^ n).

谢谢

dan*_*n04 45

一种方法是使用按位AND.如果数字$x是2的幂(例如,8 = 1000),则它与其前任(7 = 0111)没有共同的位.所以你可以写:

($x & ($x - 1)) == 0
Run Code Online (Sandbox Code Playgroud)

注意:这将为$ x == 0提供误报.


Ned*_*der 8

从数字中减去1,然后用原始数字减去它.如果结果为零,则为2的幂.

if (((n-1) & n) == 0) {
    // power of two!
}
Run Code Online (Sandbox Code Playgroud)

(抱歉,我的PHP生锈...)

  • 哈哈,这不是PHP!变量非常丰富和富裕! (4认同)