«Упаковка» данных двух int
с в 64 бита может быть выполнена без ulong
, например, так:
Dictionary<int,ValueTuple<int,int>>
ValueTuple<int,int>
занимает ровно столько же места, сколько ulong
, но позволяет вам получить доступ к отдельным int
s через его свойства.
Если вы должны использовать ulong
, вот один подход, который позволяет упаковывать и распаковывать int
s:
private static ulong Combine(int a, int b) {
uint ua = (uint)a;
ulong ub = (uint)b;
return ub <<32 | ua;
}
private static void Decombine(ulong c, out int a, out int b) {
a = (int)(c & 0xFFFFFFFFUL);
b = (int)(c >> 32);
}
Демо.