前言
在算法竞赛中我们常用 位运算来简化一些操作,下面我们介绍一下 位运算的常用操作。
&
按位与
如果两个相应的二进制位都为1,则该位的结果值为1,否则为0
|
按位或
两个相应的二进制位中只要有一个为1,该位的结果值为1
^
按位异或
若参加运算的两个二进制位值相同则为0,否则为1
~
取反
~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1
<<
左移
用来将一个数的各二进制位全部左移N位,右补0
如果用来 运算的话 右移一位 相当于 * 2
例:3<<1 = 6
>>
右移
将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数, 高位补0
如果用来 运算的话 右移一位 相当于 / 2
例:6>>1= 3
应用
1.判断奇偶
只需要判断二进制位末尾数字
如果是 1 的话,代表是奇数,如果是 0 则代表是偶数,
if(n & 1 == 1){
// n 是个奇数。}
2.交换两个数
x = x ^ y // (1)
y = x ^ y // (2)
x = x ^ y // (3)
3.求n的第k位数字:
n >> k & 1
4.返回n的最后一位1:
lowbit(n) = n & -n