位操作符的應用

位操作符都有哪些具體的應用呢,對於和我一樣陷於業務邏輯中的程序猿來講,它們就像一些熟悉的陌生人。今天在這裏列舉一些典型的例子,也希望以後能夠進行補充。


“與” “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。







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章