public static int highestOneBit(int i) {
// HD, Figure 3-1
i |= (i >> 1);
i |= (i >> 2);
i |= (i >> 4);
i |= (i >> 8);
i |= (i >> 16);
return i - (i >>> 1);
}
1、第一:最高为右移一位,得到两个1
2、第二:把这两个1右移两位,得到四个1
3、第三:把四个1右移四位,得到八个1
3、 以此类推,最终得到的i是从开始的最高位到结束全是1。并减去i不带符号的右移一位,即可得到一个int数据的最高位的值。
4、上述情况是针对于i不为零和负数的情况;
如果i为零,那么得到的结果始终为零。
如果i位负数,那么得到的结果始终是-2147483648。(负数的最高位始终为1)