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的幂次方,那么 n
和 n - 1
的按位与操作结果一定为0。
注意:
在 n
和 (n - 1)
之间进行按位与操作时,需要将 (n - 1)
的部分用括号括起来。这是因为按位与操作符 &
的优先级较低,比相等操作符 ==
的优先级低。添加括号可以确保按位与操作先于相等比较操作执行。