C#转换为1';s将位补码为2';有多长?
在C#中,如何将64位的1补码(表示为long或ulong)转换为带符号的2补码longC#转换为1';s将位补码为2';有多长?,c#,twos-complement,int64,bitconverter,ones-complement,C#,Twos Complement,Int64,Bitconverter,Ones Complement,在C#中,如何将64位的1补码(表示为long或ulong)转换为带符号的2补码long 作为参考,我正在尝试使用BitConverter.DoubleToInt64Bits()实现基于ULP的双重比较。为了将一个补码转换为二个补码,您需要先检查数字是正数还是负数。 由于2的补码的正表示形式与1的补码的正表示形式相同,因此仅当1的补码为负时,才需要执行转换 实际的转换是通过取一的补码的绝对值,翻转所有位,然后将结果增加一来完成的 if (myLong >> 63 != 0) // T
作为参考,我正在尝试使用
BitConverter.DoubleToInt64Bits()
实现基于ULP的双重比较。为了将一个补码转换为二个补码,您需要先检查数字是正数还是负数。由于2的补码的正表示形式与1的补码的正表示形式相同,因此仅当1的补码为负时,才需要执行转换 实际的转换是通过取一的补码的绝对值,翻转所有位,然后将结果增加一来完成的
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;
要将1的补码转换为2的补码,您需要先检查数字是正数还是负数。
由于2的补码的正表示形式与1的补码的正表示形式相同,因此仅当1的补码为负时,才需要执行转换 实际的转换是通过取一的补码的绝对值,翻转所有位,然后将结果增加一来完成的
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;
我怀疑你的一的补码被存储为一个
字符串?@Nolonar:我的理解是,如果将一个双精度的整数表示作为一个一的补码来处理,它是按词汇顺序排列的。因此,我想将1的补码表示转换为2的补码值,以便将其作为C#long进行处理不幸的是,我不知道浮点或双精度是否存储在1的补码中,但我知道整数(和long)存储为2的补码,因为它使正数和负数之间的加法更容易。在极端情况下,您可以通过查看最高有效位是否为1
来转换1的补码。如果是,则将其设置为0
,反转所有位~
,然后将结果递增一。如果最重要的位是0
,那么您已经有了一个2的补码(因为两者都是相等的,当为正时)@Nolonar:您的评论似乎包含了我想要的答案。介意把它作为一个答案吗?我怀疑你的一的补码被存储为一个字符串?@Nolonar:我的理解是,如果把一个双精度的整数表示作为一个一的补码,它是按词汇顺序排列的。因此,我想将1的补码表示转换为2的补码值,以便将其作为C#long进行处理不幸的是,我不知道浮点或双精度是否存储在1的补码中,但我知道整数(和long)存储为2的补码,因为它使正数和负数之间的加法更容易。在极端情况下,您可以通过查看最高有效位是否为1
来转换1的补码。如果是,则将其设置为0
,反转所有位~
,然后将结果递增一。如果最重要的位是0
,那么您已经有了一个2的补码(因为两者都是相等的,当为正时)@Nolonar:您的评论似乎包含了我想要的答案。介意把它作为答案转载吗?