Integer类里有几个我觉得挺好玩的位运算函数,大多是jdk1.5开始添加的。。也有人吐槽说用位运算效率提高了,实际上没啥只是用来耍耍酷。。我这种菜鸟还是觉得很好玩的~
看完后发现这几个函数大多数都用到了二分的思想,乍看代码不是很好理解,我通过举例子、将函数走一遍,基本梳理了这些原理和思想。这种看懂了的感觉还是很棒的~
1、public static int highestOneBit(int i)
这个函数是用来获得最高位1比特位置的,源码及注释如下:
public static int highestOneBit(int i) {
i |= (i >> 1); // i >> 1 相当于 i / 2,使最高两位均为1
i |= (i >> 2); // /2^2 这次移两位是因为最高两位已经都是1了,这次一次性移两位就4位都是1了
i |= (i >> 4); // /2^4
i |= (i >> 8); // /2^8
i |= (i >> 16); // /2^16 以此类推,得到从最高1比特位开始之后全为1的二进制串
return i - (i >>> 1); // i >>> 1 无符号右移,使最高位为0,其余位为1,相减即得出结果
}
看文字比较难理解,我们来举个例子(用16位做例子,Java中Integer类长度为32比特,原理是一样的)