我想这需要额外的信息。但是,为什么会这样呢?
(假设23位浮点类型基于IEEE 754 32位二进制浮点和Little Endianness。)
在32位整数中,它非常简单,因为:
int.MaxValue = 0x7FFFFFFF = 01111111 11111111 11111111 11111111 = 2147483647
在花车中:
0x7FFFFFFF = 01111111 11111111 11111111 11111111 = 2.14748365E + 9
我得到了E + 9表示法。但为什么会这样:
float.MaxValue = 0xFFFF7F7F = 11111111 11111111 01111111 01111111 = 3.40282347E + 38
答案 0 :(得分:9)
你说:
int.MaxValue = 0x7F,0xFF,0xFF,0xFF = 01111111 11111111 11111111 11111111 = 2147483647
int.MaxValue确实是2147483647,因为这是一个32位值,在two’s complement中签名和编码,在你的情况下以这种方式估价:
值= -2 31 b 31 + b 30 •2 30 + b < sub> 29 •2 29 + ... + b 0 •2 0 = 2147483647(因为所有位b 0 到b 30 是1而b 31 是0)。
你说:
在花车中: 0x7F,0xFF,0xFF,0xFF = 01111111 11111111 11111111 11111111 = 2.14748365E + 9
这有点不正确。你所做的是将int.MaxValue转换为float(你没有将max int值的编码解释为float - 你已经改变了表示),这是:
2.14748365E +9≈2147483647= 2147483647.0 - 人类都有相同的东西,但浮点值和整数在内存中的编码方式不同
但
2147483647.0的十六进制表示(舍入为浮点数时)为0x4f000000而不是0x7F,0xFF,0xFF,0xFF。
这就是为什么(single precision floating point format):
0x4f000000的值为(-1) 0 •(1 + 0)•2 158-127 = 1•1•2 31 = 2 31 = 2147483648.0
您可以在online IEE754 converter查看自己。
你也说过:
float.MaxValue = 0xFF 0xFF 0x7F 0x7F = 11111111 11111111 01111111 01111111 = 3.40282347E + 38
3.40282347E + 38 值是正确的,但其十六进制表示不是0xFF 0xFF 0x7F 0x7F而是0x7f7fffff。
您可以这样解码0x7f7fffff:
( - 1) 0 •(1 + 2 -1 2 -2 2 -3 + ... + 2 -23 )•2 254-127 = 1•(1 + 1)•2 127 ,约为2 •2 127 = 2 128 ≈3.40282347E+ 38.
你可能想知道为什么指数是254而不是255.指数值255是一种特殊情况,如果有效数(分数),指数设置为255的值被视为+无穷大或无穷大(取决于符号位) )如果有效数字段不为零,则字段为零,并且为NaN。
答案 1 :(得分:2)
这假设32位浮点类型基于IEEE 754 32位二进制浮点。
最大有限浮点数在符号位和最低有效指数位中均为零。在大端十六进制中,即0x7f7fffff。符号位(数字的最高位)为零,使其为正。最低有效指数位(第二个字节的最高有效位)为零以获得有限数。所有指数位1都是NaN或无穷大。
0xffff7f7f是little-endian表示。
答案 2 :(得分:2)
看起来您的字节序混淆了。最大单精度(32位)IEEE-754浮点值由以下内容组成:
所以我希望最大单精度浮点值看起来像0x7F7FFFFF。
答案 3 :(得分:2)
浮点数据格式与整数格式完全不同。该值由三个组成部分组成,即符号,指数和有效数。这些单独的组件分布在数据格式的多个字节中。例如,符号是单个位,并且与另一个组件存储在同一个字节中。
底线是您对整数表示的了解不适用于浮点表示。
答案 4 :(得分:1)
浮点数和浮点数通常与整数略有不同。虽然整数只是一个整数值的两个补码表示,但浮点数由不同的部分组成:符号位(S),指数字段(E)和有效数或尾数(M),从左到右< / p>
最大可用指数为0xFE,因为0xFF是一个表示无穷大的特殊值。
所以我们有一个符号位,对于正数为0,最大指数为0xFE,尾数为1,导致
SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM
01111111 01111111 11111111 11111111
或7F 7F FF FF
因为在一个小端机器中,字节的顺序是相反的,你看到的是
FF FF 7F 7F
答案 5 :(得分:1)
对于IEEE 754-1985规范,浮点数的格式为S8.24
所以最大的归一化数是2 ^ 127 *(2-2 ^ -23)
以二进制编码时,会产生0,1111 1110,111 1111 1111 1111 1111 1111
。
请在IEEE 754-1985中找到更详细的信息。