浮点值(例如双精度)的表示方式与整数值完全不同。从整数值中,您习惯于将它们表示为零填充(对于正数)二进制数,该二进制数表示以 2 为底的相同数字。这不适用于浮点值。
根据定义,浮点值具有浮点小数点,因此二进制数必须对小数点所在位置的信息进行编码。这是通过将数字重塑为以下内容来完成的:
(+/-) x * 2^y whereas 0 <= x < 2 (= 10 base 2)
(+/-)
是需要一位的符号。x
是尾数,y
指数。所以二进制表示最后必须编码三个部分。
因为0 <= x < 2
, x 总是以 1.something 开头,所以1.
不需要在表示中。只有小数点后的部分被保存,它被认为是有效位。
在您的示例中, 2.0 被重塑为:
+ 1.0 * 2 ^ 1
符号:+ 有效数字:0 指数:1
这恰好表示为
0 10000000000 0000000000000000000000000000000000000000000000000000
对于负数,符号是 - 表示为前导1
:
1 10000000000 0000000000000000000000000000000000000000000000000000
请注意,您的原始帖子列出了一个缺少前导 0 的数字,这在数学上是正确的,但在您尝试捕获二进制表示时会产生误导:
10000000000 0000000000000000000000000000000000000000000000000000 =
0 10000000000 0000000000000000000000000000000000000000000000000000
还有一些细节需要理解和记住。例如,指数也可以是负数。您可以在Floating Point Wikipedia 文章中找到更详细的解释。Joachim 引用的 binaryconvert.com 也可以帮助您理解表示。