-
与(&):运算符两侧,同真则真,否则为假
-
或(|):运算符两侧,有真则真,无真为假
-
非(~):取反运算
-
异或(^):运算符两侧,相同为假,不同为真
- 左移和右移
//右移一位相当于除以2
int a = 4;
a = a >> 1; // a = 2
//左移一位相当于乘以2
int b = 2;
b = b << 1; // b = 4
//右移n位相当于除以 2^n
//左移n位相等于乘以 2^n
- m % (2^n) 可以转换为 m & (2^n - 1)
- 这里需要注意只有是 2^n 才可以这样转换,如果不是的话,做不到二进制的表示后面几位都是 1 ,也就达不到求余数的目的
- 位运算的速度比取模运算的速度要快
9 % 2 == 9 & (2 - 1)
//9对4取余,可以直接转换成求余数
9 % 4 == 9 & (4 - 1)
- 将一个数的二进制表示的最右边一位1转成0
i & (i - 1)
//整数 i 的二进制表示中 1 的个数比 i&(i - 1) 多一
// i = (1100)2 --> (i - 1) = (1011)2 --> i & (i - 1) = (1000)2