【发布时间】:2013-04-04 14:04:03
【问题描述】:
在 C# 中,如何将 64 位的补码数(表示为 long 或 ulong)转换为有符号的二进制补码 long?
作为参考,我正在尝试使用 BitConverter.DoubleToInt64Bits() 实现基于 ULP 的双重比较。
【问题讨论】:
-
我怀疑你的补码存储为
string? -
@Nolonar:我的理解是,如果将双精度数的整数表示视为一个补数,则按字典顺序排列。因此,我想将该补码表示转换为二进制补码值,以便我可以将其作为 C# long
-
不幸的是,我不知道浮点数或双精度数是否存储在一个补码中,但我知道整数(和长整数)存储为二进制补码,因为它在正数和负数之间进行加法容易得多。在极端情况下,您始终可以通过查看最高有效位是否为
1来转换一个补码。如果是,则将其设置为0,反转所有位~,然后将结果加一。如果最重要的位是0,那么您已经有一个二进制补码(因为两者是等价的,当为正数时) -
@Nolonar:您的评论似乎包含我想要的答案。介意重新发布它作为答案吗?
标签: c# twos-complement int64 bitconverter ones-complement