奇偶判断
if( n & 2 == 1){
dosomething();
}
利用n & (n - 1)消去n最后的一位1
(1)、判断一个正整数n是否为2的幂次方
如果一个数是 2 的幂次方,意味着 n 的二进制表示中,只有一个位 是1,其他都是0。我举个例子,例如
2^0 = 0…..0001
2^1 = 0…..0010
2^2 = 0….0100
那么我们完全可以对n执行n = n & (n - 1),执行之后结果如果不为 0,则代表 n 不是 2 的幂次方,代码如下
(2)判断正整数n的二进制表示中有多少个 1
我们可以用不断着执行 n & (n - 1),每执行一次就可以消去一个 1,当 n 为 0 时,计算总共执行了多少次即可
异或(^)运算的妙用
特性一:两个相同的数相互异或,运算结果为 0,例如 n ^ n = 0
特性二:任何数和 0 异或,运算结果不变,例如 n ^ 0 = n
特性三:支持交换律和结合律,例如 x ^ ( y ^ x) = (x ^ y) ^ x
案例1:只出现一次是数