in src/main/java/org/apache/datasketches/theta/BitPacking.java [2629:2697]
static void packBits54(final long[] values, final int i, final byte[] buf, int off) {
buf[off++] = (byte) (values[i + 0] >>> 46);
buf[off++] = (byte) (values[i + 0] >>> 38);
buf[off++] = (byte) (values[i + 0] >>> 30);
buf[off++] = (byte) (values[i + 0] >>> 22);
buf[off++] = (byte) (values[i + 0] >>> 14);
buf[off++] = (byte) (values[i + 0] >>> 6);
buf[off] = (byte) (values[i + 0] << 2);
buf[off++] |= values[i + 1] >>> 52;
buf[off++] = (byte) (values[i + 1] >>> 44);
buf[off++] = (byte) (values[i + 1] >>> 36);
buf[off++] = (byte) (values[i + 1] >>> 28);
buf[off++] = (byte) (values[i + 1] >>> 20);
buf[off++] = (byte) (values[i + 1] >>> 12);
buf[off++] = (byte) (values[i + 1] >>> 4);
buf[off] = (byte) (values[i + 1] << 4);
buf[off++] |= values[i + 2] >>> 50;
buf[off++] = (byte) (values[i + 2] >>> 42);
buf[off++] = (byte) (values[i + 2] >>> 34);
buf[off++] = (byte) (values[i + 2] >>> 26);
buf[off++] = (byte) (values[i + 2] >>> 18);
buf[off++] = (byte) (values[i + 2] >>> 10);
buf[off++] = (byte) (values[i + 2] >>> 2);
buf[off] = (byte) (values[i + 2] << 6);
buf[off++] |= values[i + 3] >>> 48;
buf[off++] = (byte) (values[i + 3] >>> 40);
buf[off++] = (byte) (values[i + 3] >>> 32);
buf[off++] = (byte) (values[i + 3] >>> 24);
buf[off++] = (byte) (values[i + 3] >>> 16);
buf[off++] = (byte) (values[i + 3] >>> 8);
buf[off++] = (byte) (values[i + 3]);
buf[off++] = (byte) (values[i + 4] >>> 46);
buf[off++] = (byte) (values[i + 4] >>> 38);
buf[off++] = (byte) (values[i + 4] >>> 30);
buf[off++] = (byte) (values[i + 4] >>> 22);
buf[off++] = (byte) (values[i + 4] >>> 14);
buf[off++] = (byte) (values[i + 4] >>> 6);
buf[off] = (byte) (values[i + 4] << 2);
buf[off++] |= values[i + 5] >>> 52;
buf[off++] = (byte) (values[i + 5] >>> 44);
buf[off++] = (byte) (values[i + 5] >>> 36);
buf[off++] = (byte) (values[i + 5] >>> 28);
buf[off++] = (byte) (values[i + 5] >>> 20);
buf[off++] = (byte) (values[i + 5] >>> 12);
buf[off++] = (byte) (values[i + 5] >>> 4);
buf[off] = (byte) (values[i + 5] << 4);
buf[off++] |= values[i + 6] >>> 50;
buf[off++] = (byte) (values[i + 6] >>> 42);
buf[off++] = (byte) (values[i + 6] >>> 34);
buf[off++] = (byte) (values[i + 6] >>> 26);
buf[off++] = (byte) (values[i + 6] >>> 18);
buf[off++] = (byte) (values[i + 6] >>> 10);
buf[off++] = (byte) (values[i + 6] >>> 2);
buf[off] = (byte) (values[i + 6] << 6);
buf[off++] |= values[i + 7] >>> 48;
buf[off++] = (byte) (values[i + 7] >>> 40);
buf[off++] = (byte) (values[i + 7] >>> 32);
buf[off++] = (byte) (values[i + 7] >>> 24);
buf[off++] = (byte) (values[i + 7] >>> 16);
buf[off++] = (byte) (values[i + 7] >>> 8);
buf[off] = (byte) (values[i + 7]);
}