该计划的输出是什么?

时间:2015-06-11 05:29:58

标签: c

我在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

1 个答案:

答案 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.