我在某处看到这是一种特殊情况,+NaN 从 0x7F800001 变为 0x7FFFFFFF。答案是+NaN吗?
问问题
9283 次
2 回答
2
如果您解释7FFFFFFF
为 IEEE754 32 位浮点数,那么是的,7FFFFFFF
是 NaN。您可以通过查看 Wikipedia page for Single-precision floating-point format来理解这些内容。我写了这个小 C 程序来说明这一点:
#include <stdio.h>
int main(){
unsigned u0 = 0x7FFFFFFF;
unsigned u1 = 0x7F800001;
unsigned u2 = 0x7F800000;
unsigned u3 = 0x7F7FFFFF;
// *(float*)&u0 causes the data stored in u0 to be interpreted as a float
printf("%e\n", *(float*)&u0); // This gives nan
printf("%e\n", *(float*)&u1); // This also gives nan
printf("%e\n", *(float*)&u2); // This gives inf
printf("%e\n", *(float*)&u3); // This gives 3.402823e+38, the largest possible IEEE754 32-bit float
// The above code only works because sizeof(unsigned)==sizeof(float)
printf("%u\t%u\n", sizeof(unsigned), sizeof(float));
// Remember that nan is only for floats, u0 is a perfectly valid unsigned.
printf("%u\n", u0); // This gives 2147483647
}
再次,必须提到 NaN 仅作为浮点数存在。
于 2012-10-01T20:18:15.003 回答
0
+NaN 是浮点数的特殊值(它没有等效的十进制数。它是“非数字”)。如果您只想要整数的十进制表示,它具有 7FFFFFFF 作为十六进制表示,则不涉及浮点,也没有 +NaN
于 2012-10-01T19:55:38.260 回答