合并2个整数并将其存储在ulong中

时间:2018-04-27 13:33:45

标签: c# bit-manipulation bitwise-operators ulong

我有一个Dictionary<int,ulong>,我想要存储StudentId和他/她的注册courses(保证为2)。

现在,正如您所看到的,我不想将2个courseid保存到List的整数中,而是将它们存储为ulong,因为ulong占用64位且int占据32位。

所以我的问题是,我如何组合这两个整数id并将它们存储到ulong变量中。我已尝试过一些Bitwise操作并转移但无法弄明白。

1 个答案:

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

Demo.