浮点数与常规十进制二进制表示形式

问题描述 投票:-1回答:1

假设:

int a = 5;
float b = 5;

上面这样存储在64位寄存器中(第0位在右侧):

a

32                                0

00000000 00000000 00000000 00000101

b

32                                0

01000000 10100000 00000000 00000000

我的图是否正确,并且在浮点二进制表示中,LSB不会像在十进制二进制表示中那样偏向右侧,对吗?

c floating-point binary
1个回答
0
投票

您的问题有点含糊。对于大多数编程语言,类型float对应于IEEE754单精度数字,而double将对应于IEEE754双精度数字。

作为单精度IEEE-754数字,浮点数将以32位表示。 (1个符号位,8个指数位和23个小数位。)在此表示中,数字5的布局如下:

                  3  2          1         0
                  1 09876543 21098765432109876543210
                  S ---E8--- ----------F23----------
          Binary: 0 10000001 01000000000000000000000
             Hex: 40A0 0000
       Precision: SP
            Sign: Positive
        Exponent: 2 (Stored: 129, Bias: 127)
       Hex-float: +0x1.4p2
           Value: +5.0 (NORMAL)

在双精度中,IEEE754改为使用64位。有1个符号位,11个指数位和52个小数位。 5的布局为:

                  6    5          4         3         2         1         0
                  3 21098765432 1098765432109876543210987654321098765432109876543210
                  S ----E11---- ------------------------F52-------------------------
          Binary: 0 10000000001 0100000000000000000000000000000000000000000000000000
             Hex: 4014 0000 0000 0000
       Precision: DP
            Sign: Positive
        Exponent: 2 (Stored: 1025, Bias: 1023)
       Hex-float: +0x1.4p2
           Value: +5.0 (NORMAL)

请注意,浮点数或双精度数的“值”的计算方式与2的补码整数值的计算方式不同。围绕正常,不正常,无穷大和NaN(非数字)值存在规则。但这是一个完全不同的讨论。

© www.soinside.com 2019 - 2024. All rights reserved.