巧用位运算

1490152102

程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算说穿了,就是直接对整数在内存中的二进制位进行操作,位运算速度最快。

很久之前我也知道也了解也用过位运算,但并没有那么的熟悉,今天来总结一下吧。

Java也有C也有,都提供了6种位运算

&
按位与
相同位的两个数字都为1,则为1;若有一个不为1,则为0。

| 按位或
相同位只要一个为1即为1。

^ 按位异或
相同位不同则为1,相同则为0。

~ 按位取反
内存中的0和1全部取反

<< 左移
转为二进制后左移n位,相当于 * 2

右移
转为二进制后右移n位

1.交换两个数不需要第三个变量
x ^= y;
y ^= x;
x ^= y;
2.二进制快速幂
long pow(int x, int n){
long p = 1;
while (n != 0){
if ((n & 1) == 1) p *= x;
x *= x;
n >>= 1;
}
return p;
}
3.判断奇数偶数
n&1 结果为1,则n为奇数,否则偶数

n%2 = n&1

n%4 = n&3

n%8 = n&7

4.代替if else
if (x == a)
x= b;
else
x= a;
等价于
x= a ^ b ^ x;
以后有遇到的再补充