位操作符都有哪些具體的應用呢,對於和我一樣陷於業務邏輯中的程序猿來講,它們就像一些熟悉的陌生人。今天在這裏列舉一些典型的例子,也希望以後能夠進行補充。
“與” “AND” “&”
對2n取模,HashMap讀取元素的時候通過此方法獲取底層數組的index。
HashMap的size始終爲2n,而h%2n等於h&(2n-1)。
/** * Returns index for hash code h. */ static int indexFor(int h, int length) { return h & (length-1); }
判斷一個Integer是否爲2的整數次冪。
boolean power2(int x) { return ((x&(x-1))==0)&&(x>0); }
“異或” “XOR” “^”
不用臨時變量交換兩個Integer,因爲異或運算的逆運算是其自身。
void swap(int a , int b) { a ^= b; b ^= a; a ^= b; }
“左、右移位” “<<, >>”
一些運算
2n equals 1 << n
a << n 等價於 a * 2n
a >> n 等價於 a / 2n
注:對於“<<”,如果沒有溢出,無論正數還是負數,左移n位都相當於a * 2n.
對於“>>”,如果結果是正的小數,無條件捨棄小數位;如果是負的小數,捨棄小數位並給整數位+1。