幂运算
(一)2 的幂
- 若 n = 2^x且 x 为自然数(即 n 为 2 的幂),则一定满足以下条件:
- 恒有
n & (n - 1) == 0
,这是因为:一定满足n > 0。
- nn 二进制最高位为 1,其余所有位为 0;
- n - 1n−1 二进制最高位为 0,其余所有位为 1;
因此可以根据 n > 0 && (n & (n -1) == 0)来判断
(二)4 的幂
- 如果一个数是4的幂,那也一定是2的幂。
- 如果 n 是 4的幂,那么 n 的二进制表示中有且仅有一个 1,并且这个 1 出现在从低位开始的第偶数个二进制位上(这是因为这个 1 后面必须有偶数个 0)。
因此我们可以构造一个整数 m,它的所有偶数二进制位都是 0,所有奇数二进制位都是 1。
这样一来,我们将 n 和 m 进行按位与运算,如果结果为 0,说明 n二进制表示中的 1 出现在偶数的位置,否则说明其出现在奇数的位置。
m 也可以写成十六进制的0xaaaaaaaa