W[idx] = (W[idx] & ~(0xff << shift)) | ((b & 0xff) << shift);
i = (int)b; W[idx] = (W[idx] & ~(0xff << shift)) | ((i & 0xff) << shift);
  public void engineUpdate (byte b)  {    int i = (int)bytecount % 64;    int shift = (3 - i % 4) * 8;    int idx = i / 4;    // if you could index ints, this would be: W[idx][shift/8] = b    W[idx] = (W[idx] & ~(0xff << shift)) | ((b & 0xff) << shift);    // if we've filled up a block, then process it    if ((++ bytecount) % 64 == 0)      munch ();  }