查找数字是否为 2 的幂

php
2022-08-30 19:31:46

只是出于好奇,你怎么能知道一个数字x是否是二的幂(x = 2^n)而不使用递归。

谢谢


答案 1

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

($x & ($x - 1)) == 0

注意:这将给出$x == 0 的误报。


答案 2

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

if (((n-1) & n) == 0) {
    // power of two!
}

(对不起,我的PHP生锈了...)


推荐