在c#中将两个uint组合成ulong的最佳方法是什么?

Jas*_*yne 9 c# bit-shift ulong uint

在c#中将两个uint组合成ulong的最佳方法是什么,设置高/低uints.

我知道bitshifting可以做到这一点,但我不知道语法,或者可能有其他API来帮助像BitConverter,但我没有看到一个方法做我想要的.

Meh*_*ari 19

ulong mixed = (ulong)high << 32 | low;
Run Code Online (Sandbox Code Playgroud)

演员阵容非常重要.如果省略了强制转换,考虑到high类型uint(32位)这一事实,您将向32位左移32位值.32位变量的移位运算符将使用right-hand-sidemod 32的移位运算uint.实际上,向左移位32位是无操作.铸造以ulong防止这种情况.

验证这个事实很容易:

uint test = 1u;
Console.WriteLine(test << 32); // prints 1
Console.WriteLine((ulong)test << 32); // prints (ulong)uint.MaxValue + 1
Run Code Online (Sandbox Code Playgroud)