组合 2 个整数并将其存储在 ulong 中
Combine 2 integers and store it in a ulong
我有一个 Dictionary<int,ulong>
,我想在其中存储 StudentId
和 his/her 已注册 courses
(保证为 2)。
现在,如您所见,我不想将 2 个 courseid 保存到 List
整数中,而是希望将它们存储为 ulong
,因为 ulong
占用 64 位并且 int
占用32位
所以我的问题是,如何组合这 2 个整数 ID 并将它们存储到 ulong
变量中。我试过一些按位运算和移位但无法弄清楚。
"Packing"两个int
的数据变成64位可以不用ulong
,例如这样:
Dictionary<int,ValueTuple<int,int>>
ValueTuple<int,int>
占用的 space 与 ulong
一样多,但它允许您通过其属性访问单个 int
。
如果您必须使用 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);
}
我有一个 Dictionary<int,ulong>
,我想在其中存储 StudentId
和 his/her 已注册 courses
(保证为 2)。
现在,如您所见,我不想将 2 个 courseid 保存到 List
整数中,而是希望将它们存储为 ulong
,因为 ulong
占用 64 位并且 int
占用32位
所以我的问题是,如何组合这 2 个整数 ID 并将它们存储到 ulong
变量中。我试过一些按位运算和移位但无法弄清楚。
"Packing"两个int
的数据变成64位可以不用ulong
,例如这样:
Dictionary<int,ValueTuple<int,int>>
ValueTuple<int,int>
占用的 space 与 ulong
一样多,但它允许您通过其属性访问单个 int
。
如果您必须使用 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);
}