位运算符 | 描述 | 规则 |
---|---|---|
<< |
左移操作符 | 左移,高位丢弃,低位补0 |
>> |
右移操作符 | 右移,正数高位补0,负数高位补1 |
>>> |
无符号右移 | 右移,高位补0 |
| |
位或 | 两个位都为0,结果才为0 |
& |
位与 | 两个位都为1,结果才为1 |
~ |
位非 | 0变1,1变0 |
^ |
位异或 | 两个位相同为0,相异为1 |
用 (a & 1) == 0
代替 a % 2 == 0
来判断 a 是不是偶数。
a 对 16 进行取余,那么就可以使用 a & 15
order[i] ^= order[i+1];
order[i+1] ^= order[i];
order[i] ^= order[i+1];
bool isPowerOfTwo(int n) {
return (n > 0) && !(n & (n - 1));
}
static final int hash(Object key) {
int h;
// h ^ (h>>>16) 目的是让 hash 更分散
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}
// @h hash
// @length table.length
// 获得在数组中的位置,length 是2的幂次方,
// 那么 length - 1 二进制就是 01..1111
// 这样做的目的就是取 hash 后几位作为 index
static int indexFor(int h, int length) {
return h & (length-1);
}
原文:https://www.cnblogs.com/aaro0n/p/14046150.html