package ch01basic; import static java.lang.Long.toHexString; public class PackingCharacters { public static void main(String[] args) { char letterA = 'A'; char letterB = 'B'; char letterC = 'C'; char letterD = 'D'; long packed = 0L; packed = letterD; // Store D packed = (packed << 16) | letterC; // Shift and add the next letter - C packed = (packed << 16) | letterB; // Shift and add the next letter - B packed = (packed << 16) | letterA; // Shift and add the next letter - A System.out.println("packed now contains 0x" + toHexString(packed)); // Now unpack the letters and output them long mask = 0xFFFF; // Rightmost 16 bits as 1 char letter = (char) (packed & mask); // Extract the rightmost letter System.out.println("From right to left the letters in packed are:"); System.out.println(" " + letter + " 0x" + toHexString(letter)); packed >>= 16; // Shift out the rightmost letter letter = (char) (packed & mask); // Extract the new rightmost letter System.out.println(" " + letter + " 0x" + toHexString(letter)); packed >>= 16; // Shift out the rightmost letter letter = (char) (packed & mask); // Extract the new rightmost letter System.out.println(" " + letter + " 0x" + toHexString(letter)); packed >>= 16; // Shift out the rightmost letter letter = (char) (packed & mask); // Extract the new rightmost letter System.out.println(" " + letter + " 0x" + toHexString(letter)); } }