我在http://indiabix.com/中看到了下面的代码 谁能解释一下代码?
#include<stdio.h>
#include<math.h>
int main()
{
float a=5.375;
char *p;
int i;
p = (char*)&a;
for(i=0; i<=3; i++)
{
printf("%02x\n", (unsigned char)p[i]);
}
return 0;
}
结果是
00 00 AC 40
.
最佳答案
这个程序重新解释存储 float 的内存。取决于目的地的大小(此处 float )、其表示(假设 IEEE754 )和 machine endianness它可能会给出不同的输出。
在这种情况下,机器似乎是小端,浮点表示是 IEEE754。
您可以使用 this以二进制形式可视化 float 表示的在线工具。
+-------------+-----------------------------------------------------------+ | Input | 5.375 | +-------------+-----------------------------------------------------------+ | Binary32 | 40 AC 00 00 | +--------+----+-----+---------------+-------------------------------------+ | Status | Sign [1] | Exponent [8] | Significand [23] | +--------+----------+---------------+-------------------------------------+ | Normal | 0 (+) | 10000001 (+2) | 1.01011000000000000000000 (1.34375) | +--------+----------+---------------+-------------------------------------+
松散相关主题:Strict aliasing rule.
关于c - 程序的输出是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30772310/