最近在看JDK源码的过程中发现,在源码的计算中有很多地方都用到了位运算符号。打算在此记录一下。并随时更新
x * 100 = (x << 6)+ (x << 5) + (x >> 2)
x / 10 = (x * 52429) >>> (16+3) (PS 不太清楚为啥要写成16+3,直接写成 19 不好吗)
x * 10 = (x << 3) + (x >> 1)
HashMap 中的 e.hash & oldCap
判断一个数字是否大于一个2的n次方幂
2^n & x == 0
true x >= 2^(n +1)
false x < 2^(n+1)