此方法将 double 值转换为其十六进制格式的位表示形式。为什么指定转换后的值是有符号的 int64 ?与 unsigned int64 有什么区别? double 的二进制表示是唯一的。
最佳答案
首先,该方法不会将其转换为十六进制,而是将这些位转换为 Int64
,然后您可以选择将其转换为十六进制字符串,使用 ToString("X")
或类似的一些。
签名的 Int64
之间没有区别和未签名UInt64
在幕后——唯一的区别是程序如何解释 64 位字。
从本质上讲,64 位 double 也是 64 位字,但某些处理器(例如 intel x86 系列处理器)支持 80 位 double 浮点,而不仅仅是 64 位 double 。该方法只是允许 C# 解释 64 位 double 的位(或者将 80 位 double 转换为 64 位 double ,如果这是它必须处理的),就像它是 64 位有符号 int 一样。如果您想将其解释为 64 位无符号 int,只需将其转换(使用 unchecked 来防止 c# 崩溃):
ulong bitsForDouble;
unchecked {
bitsForDouble = (ulong)BitConverter.DoubleToInt64Bits(someDoubleValue);
}
将 double 的位解释为 Int64
是没有意义的。或UInt64
-- 他们只是想为我们提供一种方法来表示 64 位值中的 double 值,以满足我们可能需要的任何位操作。
关于c# - C# 中的方法 BitConverter.DoubleToInt64Bits (Double),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45774304/