位运算符相关

370 阅读1分钟

基本概念

"&" 都为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;