说,我必须在32位系统中将2147483648存储为浮点数(而不是像整数那样的定点数)。为此,尾数(有效数字)和指数是什么?这个数字如何在记忆中表现出来?
答案 0 :(得分:2)
浮点数通常由“有效数”的压缩组合表示,该组合为0或在[1,2]范围内的二进制分数;指数;和一个标志位。 (参见上面关于“IEEE 754”的评论;这是解释最常见的浮点表示的标准。它非常适合谷歌。)
2147483648将符合典型的(单精度)float
,因为最常见的形式使用二进制指数,这意味着数字表示为(有效数字)* 2 指数。由于你的数字是2的幂,它可以用单精度精确表示为1.0 * 2 31 。
然而,由于有效数(尾数)实际上不是32位(它是24位,IIRC),因此它不能存储大的任意整数的所有有效位。这意味着2147483647和2147483649都不适合。它们的低位将四舍五入,并且将具有与2147483648相同的表示(因此,相同的值)。
如果您关心非二次幂的大值,请使用double。有效位数足够大,可以安全地表示最大为53位的整数。
答案 1 :(得分:1)
用IEEE-754表示这个数字(单精度);首先,您需要将其转换为二进制等效。然后进入表格
( (-1)^sign ) * (1 + fraction)*2^(exponent-bias)
单精度偏差= 127.
+----+-------------+------------------------------------+
| 1 | 8 | 23 |
|bit | bit | bit |
+-+--+------+------+-----------------+------------------+
| | |
| | |
| | |
| | |
v v v
sign Exponent Fraction
bit