code: public static int reverse(int i) {
          // HD, Figure 7-1
          i = (i & 0x55555555) << 1 | (i >>> 1) & 0x55555555;
          i = (i & 0x33333333) << 2 | (i >>> 2) & 0x33333333;
          i = (i & 0x0f0f0f0f) << 4 | (i >>> 4) & 0x0f0f0f0f;
          i = (i << 24) | ((i & 0xff00) << 8) |
              ((i >>> 8) & 0xff00) | (i >>> 24);
          return i;
      }
docs: Returns the value obtained by reversing the order of the bits in the
  two's complement binary representation of the specified {@code int}
  value.
  
  @param i the value to be reversed
  @return the value obtained by reversing order of the bits in the
  specified {@code int} value.
  @since 1.5