一些你可能不注意的知识点

  1. 关于&,|,^几种运算符
    • 与运算:同为1,才为1
      a&b < min(a,b),即两个数做与运算,计算出来的结果会比两个数中最小的数还要小
    • 或运算:只要有一个为1,就为1
      2*max(a,b)> a|b >max(a,b),即两个数做或运算,计算出来的结果比两个数中最大的数还要大,但是不会大于最大的数的二倍
    • 异或运算:不同才为1
      a^b计算出来的结果不确定,既有可能比最小的数还小,也有可能比最大的数还大,也有可能在这两个数之间。
这几种运算符的计算结果是有其定义确定的
  1. 四分之三用位运算来实现
    (capacity >> 1) + (capacity >> 2)

  2. 将任意一个数转换成2的幂次方

     /**
      * 将任意一个数转换成2的幂次方
      * 是2的幂次方的数的特点:
      * 2 =10=1+1
      * 4 =100=11+1
      * 8 =1000=111+1
      * 16=10000=1111+1
      * 32=100000=11111+1
      */
     private int roundUp2PowerOf2(int i) {
         i--;
         i = i >>> 1;
         i = i >>> 2;
         i = i >>> 4;
         i = i >>> 8;
         i = i >>> 16;
         return i;
     }

你可能感兴趣的:(一些你可能不注意的知识点)