I'm trying to adapt this answer to arbitrary numeric values.
Let's say we have 3 (unsigned) numbers:
v1, v2, v3
and we know the respective max values they may have:
max1, max2, max3.
max1 * max2 * max3 < 2^32,
so the result (packed value) is to be within 32 bits.
How to pack/unpack them without "magic" hardcoding?
Here is a slightly different way to do it.
shift values determined based on most significant set bit of maximums.
mask values determined by complementing -1 shifted size bits.
Nothing really new here. Second shift shifts both first and second values.
Now reverse it
Prints