移位操作
左移:相当于*2 1<<n=2^n n<<1=2n
右移:相当于/2下取整 n>>1=n/2
例题:a^b
a^b
64位整数乘法
二进制状态压缩
将长度为m的bool数组用一个m位的二进制整数表示并存储
操作
- 取出整数n在二进制表示下的第k位 (n>>k)&1
- 取出整数n在二进制表示下的后k位 n&((1<<k)-1)
- 把整数n在二进位表示下的第k位取反 n^(1<<k)
- 把整数n在二进位表示下的第k位赋1 n|(1<<k)
- 把整数n在二进制表示下的第k位赋值0 n&(~(1<<k))
成对交换
通过计算发现,对于非负整数n
- n为偶数 n xor 1 =n+1
- n为奇数 n xor 0 =n- 1
lowbit 操作
lowbit(n)定义为非负整数n在二进制表示下”最低位的1及其后边所有的0“构成的数值
10=(1010) lowbit(10)=10=2
~n让原本0变0,0变1,然后+1后就会让11变为0,这样子就能找到n的最低位的1了
lowbit=x&(~n+1)=x&-x
异或操作
性质
1、交换律
2、结合律(即(ab)c == a(bc))
3、对于任何数x,都有xx=0,x0=x
4、自反性 A XOR B XOR B = A xor 0 = A