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

Har*_*shi 2 c# bit-manipulation bitwise-operators ulong

我有一个Dictionary<int,ulong>,我想存储的地方StudentId和他/她的注册courses(保证是2).

现在,正如您所看到的,List我想将它们存储ulongulong占用64位并int占用32位,而不是将2个courseid保存为整数.

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

das*_*ght 6

将两个ints 的数据"打包" 成64位可以在没有ulong例如这样的情况下完成:

Dictionary<int,ValueTuple<int,int>>
Run Code Online (Sandbox Code Playgroud)

ValueTuple<int,int>占用尽可能多的空间ulong,但它允许您int通过其属性访问各个s.

如果你必须使用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);
}
Run Code Online (Sandbox Code Playgroud)

演示.