[identity profile] first-lost-soul.livejournal.com posting in [community profile] useful_faq
Как из двух целых чисел в диапазонах (0-9999) и (0-999999) составить другое число, причём так, чтобы можно было каким-то алгоритмом эти числа обратно извлечь, и не ошибиться?

Конечно, приходит в голову что-то в этом роде: 12000561 (для 12 и 561), но должен быть более красивый алгоритм...

Date: 2012-06-11 01:56 pm (UTC)
From: [identity profile] blood-again.livejournal.com
Если допускается использование дополнительных величин в алгоритме (пи и прочие), то можно использовать Ваш алгоритм с небольшим дополнением:

Res = (A*1000000+B) xor C
Ну или Res = ((A << 20) + B) xor C

Это выполняется проще и быстрее, чем разреживание битов. Маскирующее число C можно сделать переменным в духе предложенного ув. [livejournal.com profile] nofuture_33.