java中位運算符有哪些?一般用于做什麼?好像對于一般的開發人員來講,位運算符的使用很少,隻是偶爾在面試時會被問到最高效的2的三次方求解,然後知道說是位運算<<< 。但,其實不然,位運算在jdk中經常遇到,在高效的運算系統中經常遇到。這不,我在看Hash算法的時候就看到很多位運算符出現了,是以必須要掌握下了。各進制間的轉換你有時間慢慢去學習吧。我這裡隻講位運算符的偏解。
hashmap中有如下代碼:
static int hash(int h) {
// This function ensures that hashCodes that differ only by
// constant multiples at each bit position have a bounded
// number of collisions (approximately 8 at default load factor).
h ^= (h >>> 20) ^ (h >>> 12);
return h ^ (h >>> 7) ^ (h >>> 4);
}
static int indexFor(int h, int length) {
return h & (length-1);
}
一共出現了三種位運算符>>> ^ &
>>> 右移 和>>運算結果值一樣,隻是要補位,即忽略正負,>>> 2 右移兩位,就是除以2的平方; >>> 3 除以2的3次方;類推 >>> n除以2的n次方;有右移就當然有左移,符号換個方向,除變成乘。<<注意乘隻有兩個符号。
& 相當于%取模。例: 35 & 15 即為 35 % 16 ;35 &31 即為 35 % 32
^ 這個就比較有意思了。偏解定理:1.符号兩邊如果能被2整除,并且該值大于另一個值,該位運算即為加法。例:16^5=21 2.符号兩邊如果能被2整除,并且該值小于另一個值,該位運算即為減法。例:16^19=3
其他位運算,大家有興趣偏解的,請繼續。