定义
按位与运算符“&”是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位都为1时,结果位才为1。参与运算的两个数均以补码出现。
规则:
1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0
常用技巧
- 可以用来判断整数奇偶性
a & 1
0偶 1奇
例如:
2 & 1 = 0 即 10 & 01 = 00 = 0; //偶数
6 & 1 = 0 即 110 & 001 = 000 = 0; //偶数
3 & 1 = 1 即 11 & 01 = 01 = 1; //奇数
- 判断是否是2的正整数幂
a & a-1
若结果为0表示a是2的正整数幂。因为2的正整数幂用二进制表示是1后边跟n个0,a-1为n个1,两者按位与则是0。
例如:
a = 4
4 & 3 = 100 & 011 = 000 = 0;//说明a是2的正整数幂
-
统计整数中1的个数
朴素的统计办法是:先判断n的奇偶性,为奇数时计数器增加1,然后将n右移一位,重复上面步骤,直到移位完毕。 -
对于正整数的模运算(注意,负数不能这么算)
乘除法是很消耗时间的,只要对数左移一位就是乘以2,右移一位就是除以2,传说用位运算效率提高了60%。
乘2^k, n<<k;
除2^k, n>>k。
对2的次方取模
n & (2^k -1)
等价于
n % 2^k
用通俗的言语来描述就是,对2的次方取模,取模其实就是取溢出量。只要将数与2的次方-1做按位与运算即可。HashMap的get方法中用到了此取模计算。