假设:
int a = 5;
float b = 5;
上面这样存储在64位寄存器中(第0位在右侧):
32 0
00000000 00000000 00000000 00000101
32 0
01000000 10100000 00000000 00000000
我的图是否正确,并且在浮点二进制表示中,LSB不会像在十进制二进制表示中那样偏向右侧,对吗?
您的问题有点含糊。对于大多数编程语言,类型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(非数字)值存在规则。但这是一个完全不同的讨论。