巧用位运算来解决2的幂次方

1 什么是位运算呢?

按位与操作是一种二进制运算符,用符号 & 表示。它逐位比较两个操作数的对应位,只有当两个对应位同时为1时,结果的对应位才为1,否则为0。

按位与操作的规则如下:

  • 如果两个对应位都为1,则结果位为1。
  • 如果任一对应位为0,则结果位为0。

例如,假设有两个二进制数字:10101011 和 11110000。执行按位与操作的结果如下:

10101011

&

11110000

-----------

10100000

因此,10101011 和 11110000 的按位与操作结果为 10100000。

2 利用位运算来巧解2的幂次方

public boolean isPowerOfTwo(int n) {
    if (n > 0 && (n & (n - 1)) == 0) {
        return true;
    } else {
        return false;
    }
}

说明:

        这种方法利用了2的幂次方的特性:一个2的幂次方减去1后,其二进制表示中最高位变为0,其他位都变为1。所以,如果一个数 n 是2的幂次方,那么 nn - 1 的按位与操作结果一定为0。

注意:

        n(n - 1) 之间进行按位与操作时,需要将 (n - 1) 的部分用括号括起来。这是因为按位与操作符 & 的优先级较低,比相等操作符 == 的优先级低。添加括号可以确保按位与操作先于相等比较操作执行。

你可能感兴趣的:(Java)