我想这几乎不需要额外的信息。但是,为什么会这样呢?

(这假设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/

10-10 23:08