位操作符的应用

位操作符都有哪些具体的应用呢,对于和我一样陷于业务逻辑中的程序猿来讲,它们就像一些熟悉的陌生人。今天在这里列举一些典型的例子,也希望以后能够进行补充。


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







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