位运算符偏解

来源:互联网 发布:临沂软件培训 编辑:程序博客网 时间:2024/05/29 08:26

          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


其他位运算,大家有兴趣偏解的,请继续。

原创粉丝点击