C语言中提供了六种运算符:&(按位与),|(按位或),~(按位取反),^(按位异或),<<(左移),>>(右移);
在CF中当我们在欣赏大神的代码时,可能经常看到许多和位运算有关的干货,刚开始看时一脸蒙逼,下去了解之后发现代码之路道
阻且长啊。
1、乘以一个2的倍数值,改为左移运算符(<<)之后加速300%:
n *= 2 ——> n = n<<1; //2^1 == 2
n *=16 ——> n = n<<4; //2^4 == 16
2、除以一个2的倍数值,改为右移运算符(>>)之后加速350%:
n /= 2 ——> n = n>>1; //2^1 == 2
n /= 8 ——> n = n>>3; //2^3 == 8
3、交换int a,b的值,改为异或运算符(^)之后加速20%:
_________________ ____________________
| int t = a; | ——》 | a = a^b; b = a^b; |
| a = b, b = t; | ——》 | a = a^b; |
|_________________| ——》 |____________________|
4、取余数,除以2的倍数值,改为与运算符(&)之后加速600%:
n %= 2*k ——> n = n & (2*k - 1);
n %= 4 ——> n = n & (4-1);
n %= 16 ——> n = n & (16-1);
5、判断奇偶性,改为与运算符(&)之后加速600%:
is_Even(n) == n%2==0 ——> is_Even(n) == n&1 == 0;