定义

按位与运算符“&”是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位都为1时,结果位才为1。参与运算的两个数均以补码出现。

规则:

1 & 1 = 1  
1 & 0 = 0  
0 & 1 = 0  
0 & 0 = 0  

常用技巧

  1. 可以用来判断整数奇偶性
    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;  //奇数
  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. 统计整数中1的个数
    朴素的统计办法是:先判断n的奇偶性,为奇数时计数器增加1,然后将n右移一位,重复上面步骤,直到移位完毕。

  2. 对于正整数的模运算(注意,负数不能这么算)
    乘除法是很消耗时间的,只要对数左移一位就是乘以2,右移一位就是除以2,传说用位运算效率提高了60%。

乘2^k,  n<<k;  
除2^k,  n>>k。

对2的次方取模

n & (2^k -1)

等价于

n % 2^k

用通俗的言语来描述就是,对2的次方取模,取模其实就是取溢出量。只要将数与2的次方-1做按位与运算即可。HashMap的get方法中用到了此取模计算。