基本概念
"&" 都为1时为1,否则为0
"|" 只要有一个是1就是1,都为0结果为0
"^" 异或,不一样为1,否则为0
"~" 取反
"<<" 左移
">>" 右移
">>>" 无符号右移
常用的操作
x&(x-1) 去掉x最右侧的1
x^32大小写转换
hashMap取模Integer.bitCount(n) == 1 (n-1)&hash
交换ab的值 a=a^b;b=a^b;a=a^b
一些性质
1.都满足交换律
a|b = b|a
a&b = b&a
a^b = b^a
2.都满足结合律
(a|b)|c = a|(b|c)
(a&b)&c = a&(b&c)
(a^b)^c = a^(b^c)
3.分配律(其他类推)
a&(b|c) = (a&b)|(a&c)
a^(b|c)=(a^b)|(a^c)
4.其他
a|0 = a
a&1 = a
a&0 = 0
a^a = 0
a^0 =a
a|~a = 1
a&~a = 0
a&a = a
a|a = a
a|(a&b) = a
a&(a|b) = a
hashMap的初始化
int n = cap - 1;
n |= n >>> 1;
n |= n >>> 2;
n |= n >>> 4;
n |= n >>> 8;
n |= n >>> 16;
return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1;