出于好奇,在不使用递归的情况下,如何判断数字x是否为2的幂(x = 2^n)?
谢谢
发布于 2011-02-11 11:25:49
一种方法是使用按位AND。如果数字$x是2的幂(例如,8=1000),则它将没有与其前身(7=0111)相同的位。所以你可以这样写:
($x & ($x - 1)) == 0注意:这将给出$x == 0的误报。
发布于 2011-02-11 11:25:57
从数字中减去1,然后将其与原始数字进行and运算。如果结果是0,则是2的幂。
if (((n-1) & n) == 0) {
// power of two!
}(对不起,我的PHP生锈了...)
发布于 2011-02-11 11:26:35
如果是2的幂呢?好吧,一种方法是将其转换为二进制,并验证是否只存在1个1...:
$bin = decbin($number);
if (preg_match('/^0*10*$/', $bin)) {
//Even Power Of 2
}https://stackoverflow.com/questions/4965301
复制相似问题