System.out.println( "Fresh: " + Long.toHexString(freshBits) + "[" + numFreshBits + "] " + "Significant: " + Long.toHexString(significantFreshBits) + " " + "Output: " + Long.toHexString(outputBits) );
  private int readBits(int numBits) throws IOException {    int result = 0;    if (numBits != 0) {      if (numBits > numFreshBits)        readMoreFreshBits();      assert (numBits <= numFreshBits) : "Oops!"; /** @todo */      long significantFreshBits = (freshBits << (32 - numFreshBits)) & 0x00000000FFFFFFFFL;      long outputBits = significantFreshBits >> (32 - numBits);      result = (int) outputBits;      System.out.println(        "Fresh: " + Long.toHexString(freshBits) + "[" + numFreshBits + "] " +        "Significant: " + Long.toHexString(significantFreshBits) + " " +        "Output: " + Long.toHexString(outputBits)      );      numFreshBits -= numBits;    }    return result;  }