当你做一个非常大的数的乘除运算时,你就会为位运算感叹,为之惊人的速度而感动!下面是我总结的一点点位运算的应用:
位运算符有:&(按位与)、|(按位或)、^(按位异或)、~ (按位取反)。
优先级从高到低,依次为~、&、^、|。
1. 左移1位相当于乘以2 << 左移2位相当于乘以4 依次类推左移N位相当于乘以2^n;(注意:两个操作数必须是int)
2. 右移1位相当于除2 >>右移2位相当于乘以4 依次类推左移N位相当于除2^n;
(注意:两个操作数必须是int,必须用于整除,结果也是整型的,不会保留小数部分).
3. 异或运算^:同为0,异为1
3.1应用 (只能用于整数)相同的两个整数作^运算结果为0。
3.2只能用于整数 0异或^其它任意整数等于该整数本身。(西南科大oj 1424 Find Different)。
3.3不用设置中间变量,用于交换两个整数的位置。
Int a = 9 ; int b = 2;
a = a ^ b;
b = b ^ a;
a = a ^ b;
4. 二进制的最末位为0表示该数为偶数,最末位为1表示该数为奇数.
判断int型变量a是奇数还是偶数,尤其是对大数的判断
a&1 == 0 偶数
a&1 == 1 奇数
5. 利用与运算可以求出一个int变量里面有多少个1
Sum里面存的就是该数对应的二进制中1的个数。
int a = 4095;
int sum = 0;
while(a > 0)
{
a = a & (a-1);
sum++;
}
cout << sum <<endl;
6.(|)按位或
| 运算符查看两个表达式的二进制表示法的值,并执行按位“或”操作。该操作的结果如下所示:
0101 (expression1)
1100 (expression2)
----
1101 (结果)
任何时候,只要任一表达式的一位为 1,则结果的该位为 1。否则,结果的该位为 0。