class ContainerHelpers {
// This is Arrays.binarySearch(), but doesn't do any argument validation.
static int binarySearch(int[] array, int size, int value) {
int lo = 0;
int hi = size - 1;
while (lo <= hi) {
final int mid = (lo + hi) >>> 1;
final int midVal = array[mid];
if (midVal < value) {
lo = mid + 1;
} else if (midVal > value) {
hi = mid - 1;
} else {
return mid; // value found
}
}
return ~lo; // value not present
}
...
}
第一点: (lo + hi) >>> 1;
<<(左移)、>>(带符号右移)和>>>(无符号右移)&按位与 |按位或 ~按位取反 ^按位异或
数学意义
右移一位相当于除2,右移n位相当于除以2的n次方。 在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方
第二点 int lo = 0; return ~lo ; // -1