我在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 00 AC 40
答案 0 :(得分:5)
该程序重新解释存储浮点数的内存。根据目的地的大小(此处为float),其表示(假设IEEE754)和machine endianness可能会给出不同的输出。
在这种情况下,看起来机器是小端,浮点表示是IEEE754。
您可以使用this在线工具以二进制形式显示浮动再现。
+-------------+-----------------------------------------------------------+ | 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.