mid = (low + hi) >> 1;
mid = (low + hi) >>> 1;
  public static int binarySearch(byte[] a, byte key)  {    int low = 0;    int hi = a.length - 1;    int mid = 0;    while (low <= hi)      {        mid = (low + hi) >> 1;        final byte d = a[mid];        if (d == key)          return mid;        else if (d > key)          hi = mid - 1;        else          // This gets the insertion point right on the last loop.          low = ++mid;      }    return -mid - 1;  }