ACa*_*ter 0 c++ floating-point 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);
}
Run Code Online (Sandbox Code Playgroud)
它的输出是nan!isnan也为它返回true。这是怎么发生的?0x40d5c67f 是 6.6804...
在我的类似 arduino 的微控制器和http://cpp.sh/ 上都会发生
如果您在使用little-endian的机器上运行此代码,则多字节数字的较高位将存储在内存的较高地址中。
因此,在小端机器上,内存上的 4 字节数字
0x40, 0xd5, 0xc6, 0x7f被视为0x7fc6d540,而不是0x40d5c67f。
解释为IEEE754,这个数的指数部分是255,这个数的小数部分不是0,所以这是NaN。