首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >判断一个数是否为2的幂

问判断一个数是否为2的幂
EN

Stack Overflow用户
提问于 2011-02-11 11:21:39
回答 8查看 8K关注 0票数 21

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

谢谢

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-02-11 11:25:49

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

代码语言:javascript
复制
($x & ($x - 1)) == 0

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

票数 50
EN

Stack Overflow用户

发布于 2011-02-11 11:25:57

从数字中减去1,然后将其与原始数字进行and运算。如果结果是0,则是2的幂。

代码语言:javascript
复制
if (((n-1) & n) == 0) {
    // power of two!
}

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

票数 10
EN

Stack Overflow用户

发布于 2011-02-11 11:26:35

如果是2的幂呢?好吧,一种方法是将其转换为二进制,并验证是否只存在1个1...:

代码语言:javascript
复制
$bin = decbin($number);
if (preg_match('/^0*10*$/', $bin)) {
    //Even Power Of 2
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4965301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档