0

在 C# 中,如何将 64 位补码数(表示为 long 或 ulong)转换为有符号的二进制补码 long?

作为参考,我正在尝试使用BitConverter.DoubleToInt64Bits().

4

1 回答 1

3

为了将一个补码转换为二进制补码,您需要先检查数字是正数还是负数。
由于二进制补码的正表示等同于一个补码的正表示,因此您只需要在您的补码为负时执行转换。

实际的转换是通过取反码的绝对值,翻转所有位,然后将结果加一来完成的。

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;
于 2013-04-04T16:11:50.100 回答