幂为整数的条件(如何判断一个整数是2的幂)

今天看到一个小算法挺有意思。如何判断一个整数是2的幂。

假设整数为v,v如果是2的幂,需具备一个特点,它的二进制位中只有一位是1。于是可以通过判断它的二进制位中有多少个1, 结果有且只有1个1,就是2的幂。

写出代码就是:

幂为整数的条件(如何判断一个整数是2的幂)(1)

到这里本来该结束了,发现还有更简单的办法, 如下

幂为整数的条件(如何判断一个整数是2的幂)(2)

一开始看,没有太明白。 val & ( val - 1) == 0,就说明了val是2的幂?

还得从二进制的角度来看,val既然是2的幂,则val中有且只能有一位是1,其余位全为0,二进制可以写成形式

val = x0.x1.x2.x3..xk.xk 1….xn

假设xk位为1,其余位为0,则 n = val-1的结果是 从xk 1开始到xn全部变为1,而x0到xk全部为0

这样的话 val & n 就为0了。而如果 val中不止1个1,则n & val不可能为0, 因此只要满足

val & n == 0,就能说明val是2的幂。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页