.NET浮点数在内存中的表示形式

时间:2018-09-13 16:18:08

标签: c# .net floating-point

根据Jon Skeet's float article,将符号位设置为1,将其他所有设置为0仍将得到数字0。我不确定100%是否将符号位设置为第一位(如本文所述) )或最后一位(如docs中所述)。无论如何,我都尝试过:

byte[] buf = new byte[4];
buf[0] = 0b10000000;
buf[1] = 0b00000000;
buf[2] = 0b00000000;
buf[3] = 0b00000000;
float f = BitConverter.ToSingle(buf, 0); // 1,793662E-43

buf[0] = 0b00000000;
buf[1] = 0b00000000;
buf[2] = 0b00000000;
buf[3] = 0b00000001;
float g = BitConverter.ToSingle(buf, 0); // 2,350989E-38

两者都不都为0。我在做什么错?将所有位设置为0的健全性检查有效。

1 个答案:

答案 0 :(得分:1)

由于用户使用EOF,我意识到.NET字节不存储在(对于非位黑客而言)直观的耐力中。 buf[3] = 0b10000000;可以解决问题。