private static int indexedBinarySearch(List<? extends T> l, T key, Comparator<? super T> c) {
int low = 0;
int high = l.size()-1;
while (low <= high) {
[color=red] int mid = (low + high) >>> 1;[/color] T midVal = l.get(mid);
int cmp = c.compare(midVal, key);
if (cmp < 0)
low = mid + 1;
else if (cmp > 0)
high = mid - 1;
else
return mid; // key found
}
return -(low + 1); // key not found
}
为什么要使用无符号右移,和>>他们的区别是什么啊?难道是忽略符号?不关心是正数还是负数,那如果出现负数,应该报错才对啊。都不是正常的数组
呵呵,哥们这个是逐位运算符看着这个
[url]http://demojava.iteye.com/blog/1367827[/url]
里面有说明:
想什么:左移运算符<<
带符号的右移运算符>>
用0补足的右移运算符(>>>)
自己慢慢看吧。。希望能帮上忙
二进制的无符号的右移,效率比除快
nt mid = (low + high) >>> 1 相当于 (low + high) /2
比如8 二进制是1000
1000(二进制) >>> 2 ==== 等价于 8(十进制)/2
关注一下JAVA基础类型运算:
左移运算符<<
带符号的右移运算符>>
用0补足的右移运算符(>>>)
JAVA基础中讲的很详细