我有一个Dictionary<int,ulong>
,我想要存储StudentId
和他/她的注册courses
(保证为2)。
现在,正如您所看到的,我不想将2个courseid保存到List
的整数中,而是将它们存储为ulong
,因为ulong
占用64位且int
占据32位。
所以我的问题是,我如何组合这两个整数id并将它们存储到ulong
变量中。我已尝试过一些Bitwise操作并转移但无法弄明白。
答案 0 :(得分:6)
可以在没有int
的情况下将两个ulong
的数据“打包”成64位,例如:
Dictionary<int,ValueTuple<int,int>>
ValueTuple<int,int>
占用的空间与ulong
完全相同,但它允许您通过其属性访问各个int
。
如果你必须使用ulong
,这里有一种方法可以打包和解包int
:
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);
}