highbits = rnd.nextInt() >>> (32 - highbits);
{ rnd.nextBytes(highBitBytes); highbits = (highBitBytes[highBitByteCount - 1] & 0xFF) >>> discardedBitCount; for (int i = highBitByteCount - 2; i >= 0; i--) highbits = (highbits << 8) | (highBitBytes[i] & 0xFF); }
  private void init(int numBits, Random rnd)  {    int highbits = numBits & 31;    if (highbits > 0)      highbits = rnd.nextInt() >>> (32 - highbits);    int nwords = numBits / 32;    while (highbits == 0 && nwords > 0)      {	highbits = rnd.nextInt();	--nwords;      }    if (nwords == 0 && highbits >= 0)      {	ival = highbits;      }    else      {	ival = highbits < 0 ? nwords + 2 : nwords + 1;	words = new int[ival];	words[nwords] = highbits;	while (--nwords >= 0)	  words[nwords] = rnd.nextInt();      }  }