在 C# 中,如何将 64 位补码数(表示为 long 或 ulong)转换为有符号的二进制补码 long?
作为参考,我正在尝试使用BitConverter.DoubleToInt64Bits()
.
在 C# 中,如何将 64 位补码数(表示为 long 或 ulong)转换为有符号的二进制补码 long?
作为参考,我正在尝试使用BitConverter.DoubleToInt64Bits()
.
为了将一个补码转换为二进制补码,您需要先检查数字是正数还是负数。
由于二进制补码的正表示等同于一个补码的正表示,因此您只需要在您的补码为负时执行转换。
实际的转换是通过取反码的绝对值,翻转所有位,然后将结果加一来完成的。
if (myLong >> 63 != 0) // The last bit is not 0, meaning myLong is negative
{
myLong = (myLong & (long.MaxValue >> 1)); // sets the leading bit to 0, making myLong positive
myLong = ~myLong + 1; // flips all bits and increments by 1
}
return myLong;
// One-liner alternative
return myLong >> 63 != 0 ? (~(myLong & (long.MaxValue >> 1))) + 1 : myLong;