Довольно часто мне нужно упаковать 2 инта в лонг, или из лога получить 2 инта, ну или в шортов сделать инт и т.д.
Это применяется в основном в каких-нибудь Dictionary (или подобных кейсах) в виде ключей, чтобы не городить структуру, да и работать оно будет быстрее.
void ToInts(long a, out int a1, out int a2) {
a1 = (int)(a & uint.MaxValue);
a2 = (int)(a >> 32);
}
long ToLong(int a1, int a2) {
long b = a2;
b = b << 32;
b = b | (uint)a1;
return b;
}