- 与 &
1 & 1= 1; 1 & 0 = 0; 0 & 0 = 0; 两个位都为1时结果才为1 其他都为0 跟1与的任何值结果都为本身 跟0与的任何值都为0
- 或 |
1 | 1 =1; 1 | 0 = 1; 0 | 0 = 0; 两个位都为0是结果才为0 其他都为1 跟1或的任何值都为1 跟0或的任何值都为本身
- 非 ~
~ 1 = 0; ~ 0 = 1
- 异或 ^
1 ^ 1 = 0; 1 ^ 0 = 1; 0 ^ 0 = 0; 1 ^ 1 ^ 1 = 1; 1 ^ 0 ^ 0 = 1; a ^ a = 0; a ^ a ^ b = b; 任何一个数与本身异或结果为0
- 左移 <<
0010 << 1 = 0100 末尾补0 移动一次相当于乘以2
- 有符号右移 >>
0100 >> 1 = 0010; 1100 >> 1 = 1110 首位补符号位 移动一次相当于除以2
- 无符号右移 >>>
0100 >>> 1 = 0010; 1100 >>> 1 = 0110 首位补0 正数相当于有符号右移
- 取特定bit位的值
m & 2 ^ (x-1) x为bit位序号,从右开始
- 将数字二进制位最后一个为1的bit位置为0
m & (m - 1)
- 获取数字二进制位中最后一个为1的bit位
m & (-m)
因为 -m = ~m + 1 m = 14 00001110 -m = ~m + 1 11110010 m & -m 00000010 - 数组中一个元素出现了奇数次 其他元素出现偶数次
所有元素异或
- 汉明重量 统计数字二进制位中1的个数
m & 1 得到末尾元素的值,循环右移m或者左移1,得到每位的值 迭代n次 n为int的总位数 m & (m - 1) 每次消去一个1,直到结果m为0 迭代x次 x为1的个数 极端情况下全为1