目录
& 与 << 左移
| 或 >> 右移
^ 抑或
用法
& 与 (and)
1 & 1 = 1 其他组合都为0
1.判断奇偶 奇数的最后一位是1, 偶数的最后一位是0
2.判断某一位是1还是0
| 或 (or)
1 | 1 = 1; 0 | 0 = 0;
1 | 0 = 1; 0 | 1 = 1;
只要有一个是 1 就返回 1
^ 抑或 (xor)
1 ^ 1 = 0; 0 ^ 0 = 0;
1 ^ 0 = 1; 0 ^ 1 = 1;
注意 : 满足 ( a ^ b) ^ b = a;
以上这些都可以在搜索或其他算法中作为收集 true 和 false 的工具
<<左移 (shl)
a << b = a * ( 2 ^ b ) // 注 : 这里指2的b次方, 下同
即把a的二进制表示数后添加b个0
常用 1 << x 来表示 2 的 x 次方
>>右移 (shr)
a >> b = int( a / (2 ^ b ) )
即把a的二进制表示数后硬生生除去b位
即把a的二进制表示数后硬生生除去b位
以上两种移位的运算可以用于各种二分、树上倍增(其他倍增也可以)、堆的运算等等
比普通的乘法、除法、取模要快很多
在优化程序时可以考虑
即把a的二进制表示数后添加b个0