Java tutorial
//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); } } } } }