组合 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,这里有一种方法可以让您打包和解包 ints:

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);
}

Demo.