关于Collections里面一个移位有点不解。

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基础中讲的很详细