常用位运算
奇偶性判断
a & 1
这个表达式可以用来判断a的奇偶性。二进制的末位为0表示偶数,最末位为1表示奇数
判断是否是2的次幂
n & (n - 1)
若该数是2^n倍,则可用于取模
a % b == a & (b - 1) //b必须是2^n倍
交换两数字
void swap(int &a, int &b) { a ^= b; b ^= a; a ^= b; }
正负数交换
a = ~a + 1
绝对值
int abs(int a) { int i = a >> 31; return ((a^i) - i); }
求平均值(防溢出)
a > b
average = b + ((a - b)>>1)