C++ 将浮点数打印为 nan

C++ printing float as nan

这是一个简化的 C++ 程序,将 4 个字节转换为其 IEE754 浮点表示形式。

#include <iostream>
#include <math.h>
#include <memory.h>

uint8_t bytes[4] = {0x40, 0xd5, 0xc6, 0x7f}; // 0x40d5c67f
float f;

int main()
{
    memcpy(&f, &bytes[0], 4);
    printf("%.*lf", 5, f);
}

它的输出是nanisnan 也 returns 对吧。这是怎么发生的? 0x40d5c67f is 6.6804...

发生在我​​的类似 arduino 的微控制器和 http://cpp.sh/

如果您 运行 在使用 little-endian 的机器上使用此代码, 多字节数的高位存储在内存的高地址。

因此,在小端机器上,内存中的 4 字节数字 0x40, 0xd5, 0xc6, 0x7f 被视为 0x7fc6d540,而不是 0x40d5c67f

解释为 IEEE754,这个数字的指数部分是 255 并且 这个数字的小数部分不是 0,所以这是 NaN。