Java Integer.highestOneBit(int num) 源码解析

来源:互联网 发布:最靠谱的网络兼职 编辑:程序博客网 时间:2024/04/30 06:01

这个函数返回一个int值,这个值代表num的最高位为1,其它位为0的整数,负数的最高位在第32位上,所以通常只用于负数。
源码解析:
从左往右数称之为前。
把最右边的位数都变为1,最后i-(i>>>1)得到只保留最高位的结果。

public static int highestOneBit(int i) {        // 例如1000        i |= (i >>  1); // 使前2位变为1,相当于i = i | (i >> 1); i = 1000 | 0100 = 1100        i |= (i >>  2); // 使前4位变为1,由于上一步确保了前两位都是1,所以这一次移动两位,1111        i |= (i >>  4); // 使前8位变为1,1111        i |= (i >>  8); // 使前16位变为1,1111        i |= (i >> 16); // 使前32位变为1,1111        return i - (i >>> 1); // i >>> 1 无符号右移,使最高位为0,其余位为1,相减即得出结果,1111 - 0111 = 1000     }

或运算 使得 有1则1,那么我们先使1位为1,然后两位,然后四位,以此类推。

参考资料:http://blog.csdn.net/trigl/article/details/51494826

1 0