关于位运算:位运算的使用
对于位运算位运算就是二进制运算,咱们晓得计算机cpu运算最底层的物理实现,就是高低电平输出,形象成数学符号就是二进制01输出。因而位运算对cpu来说是最高效的,因为咱们用它的“母语”和它交换。因而,juc库很多中央都有位运算的影子,就是为了提高效率,有的中央用得奇妙真是让人惊叹,让人大呼还能这样,既优雅又简洁,应了中国的那句老话,大道至简! 使用示例给定一个整型容量initialCapacity,计算这个容量最近的2的n的数 initialCapacity = numElements; initialCapacity |= (initialCapacity >>> 1); initialCapacity |= (initialCapacity >>> 2); initialCapacity |= (initialCapacity >>> 4); initialCapacity |= (initialCapacity >>> 8); initialCapacity |= (initialCapacity >>> 16); initialCapacity++;上述代码翻译成人类语言就是,给定一个数,咱们从二进制的角度看这个数;比方8,它的二进制是1000;把它最高位1之后的其余位都变成1,而后加1;即1000 -> 1111,加1后变成10000,对应的十进制是16. 下面这段代码其实是摘自ArrayDeque的 allocateElements,其实它还思考了溢出变成正数状况,就是二进制最高位是1的状况。 相似的还有jdk1.8 hash map的容量初始化修改计算,为啥cap要先减去1,为了使得输出刚好是2的n次方的数的容量不须要再修改,比方8,对应的二进制是1000,减去1后的二进制是0111,对应的十进制是7,用同样的算法,算出后果是8,和输出的8统一。