我想这几乎不需要额外的信息。但是,为什么会这样呢?
(这假设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
最佳答案
你说:
int.MaxValue的确是2147483647,因为这是一个32位值,已使用two’s complement进行了签名和编码,在您的情况下按以下方式进行赋值:
你说:
那有点不对。完成的操作是将int.MaxValue转换为float(尚未将最大int值的编码解释为float-您已更改了表示形式),即:
但
这就是为什么(single precision floating point format):
您可以在这里检查自己online IEE754 converter。
您还说过:
3.40282347E + 38 值正确,但其十六进制表示形式不是0xFF 0xFF 0x7F 0x7F而是0x7f7fffff。
您可以通过以下方式解码0x7f7fffff:
您可能想知道为什么指数是254而不是255。指数值255是一种特殊情况,如果有效位数(分数)字段为,则指数设置为255的值将被视为+无限或-无限(取决于符号位)。 0,如果有效位数不为零,则为NaN。
关于c# - 为什么float.MaxValue 0xFF 0xFF 0x7F 0x7F而不是像int那样的0x7F,0xFF,0xFF,0xFF?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19901100/