Data Type Java

//package com.myapp.util.cache.compress;
public class IntToLongCompressor {
    
    public static long pack(int x, int y) {
        long xPacked = ((long)x) << 32;
        long yPacked = y & 0xFFFFFFFFL;
        return xPacked | yPacked;
    }
    public static int unpackX(long packed) {
        return (int) (packed >> 32);
    }
    public static int unpackY(long packed) {
        return (int) (packed & 0xFFFFFFFFL);
    }
    public static void main(String[] args) {
        int x = -23664;
        int y = -6543;
        System.out.println("x=    "+Integer.toHexString(x));
        System.out.println("y=    "+Integer.toHexString(y));
        long pack = pack(x,y);
        System.out.println("pack= "+Long.toHexString(pack));
        int x2 = unpackX(pack);
        System.out.println("x2=   "+Integer.toHexString(x2));
        int y2 = unpackY(pack);
        System.out.println("y2=   "+Integer.toHexString(y2));
        testAll();
    }
    private static void testAll() {
        long pack, iteration = 0;
        int iTmp, jTmp;
        for (int i = -100000; i <= 100000; i++) {
            if (i % 100 == 0)
                System.out.println("i = "+i+ ", iterations = "+iteration);
            for (int j = -100000; j <= 100000; j++, iteration++) {
                pack = pack(i, j);
                iTmp = unpackX(pack);
                jTmp = unpackY(pack);
                if (i != iTmp || j != jTmp) {
                    throw new RuntimeException("i="+i+", j="+j);
                }
            }
        }
    }
}