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;
以后有遇到的再补充