其他分享
首页 > 其他分享> > 快速判断一个正整数是否是2的幂

快速判断一个正整数是否是2的幂

作者:互联网

        之前已经有人写过类似的解决方法了,引用比较多的是:(x - 1) & x == 0。这个方法比较直观,基本思路是:如果 x 是 2 的幂,那么它的二进制一定是由 1 个 1 和若干个 0 组成,那么(x - 1)是由 x 低位的所有 0 取反而来,因此 (x - 1) & x 等于 0。

        除了上述方法,还可以用下面的方法来判断:
        (x & -x) == x
        思路和上面的基本一样,其中 (x & -x) 是由 x 二进制中最低位的 1 及其后面的 0 所构成的数,如果 x 是 2 的幂,那么 (x & -x) 应该等于 x,因为 x 的二进制中只有一个 1。

        测试代码如下:

#include <stdio.h>

int main(void)
{    
    unsigned long x;
     
    for (x = 0; x < 1000000000; x++)
        if ((x & -x) == x)
            printf("x = 0x%0lx\n", x);
     
    return 0;                                                                                                                                                                                                                                 
}    

        输出结果如下:

$ gcc -o main main.c
$ ./main
x = 0x0
x = 0x1
x = 0x2
x = 0x4
x = 0x8
x = 0x10
x = 0x20
x = 0x40
x = 0x80
x = 0x100
x = 0x200
x = 0x400
x = 0x800
...

标签:判断,正整数,二进制,是否是,如下,那么,等于,main,方法
来源: https://blog.csdn.net/choumin/article/details/122379885