在 c# 中将两个 uint 组合成一个 ulong 的最佳方法是什么,设置高/低 uint。
我知道位移可以做到这一点,但我不知道语法,或者可能有其他 API 可以提供帮助,例如 BitConverter,但我没有看到可以满足我要求的方法。
ulong mixed = (ulong)high << 32 | low;
演员阵容非常重要。如果省略强制转换,考虑到high
type的事实uint
(即 32 位),您会将 32 位值向左移动 32 位。32 位变量上的移位运算符将使用right-hand-side
mod 32 的移位内容。实际上,将uint
32 位向左移动是无操作的。铸造以ulong
防止这种情况。
验证这一事实很容易:
uint test = 1u;
Console.WriteLine(test << 32); // prints 1
Console.WriteLine((ulong)test << 32); // prints (ulong)uint.MaxValue + 1
ulong output = (ulong)highUInt << 32 + lowUInt
和运算符分别向左(更高)和向右(更低)位移<<
。在功能上与 相同,但可能更快并且是(IMO)更简单的语法。>>
highUInt << 32
highUInt * Math.Pow(2, 32)
在位移之前,您必须将 highInt 转换为 ulong:
ulong output = highInt;
output = output << 32;
output += lowInt;
编码:
ulong mixed = (ulong)hi << 32 | lo;
解码:
uint lo = (uint)(mixed & uint.MaxValue);
uint hi = (uint)(mixed >> 32);