2

认为,float a = 12.5;

我知道它的十六进制表示是0×41480000. 但是如何float通过程序打印它的十六进制表示?

4

3 回答 3

2

使用带指针的类型双关语将浮点数视为整数。

float a = 12.5;
long *aint = (long *)&a;
printf("0x%lx\n", *aint);

您也可以只使用强制转换,而不是添加变量:

printf("0x%lx\n", *(long *)&a);
于 2013-07-04T04:02:44.230 回答
1

自 C99 以来,有一个%a说明符基本上可以做到这一点。它为您提供十六进制和指数的尾数表示。这里唯一的障碍是它double代替float, 但这不应该打扰你。

于 2013-07-04T07:58:03.033 回答
0

在 C 中执行此操作的合理方法是使用联合。在 C 1999 或更高版本中,您可以使用以下表达式执行此操作:

(union { float f; uint32_t u; }) { a } .u

下面是一个完整的演示程序。这要求它float是交换格式的 IEEE-754 32 位二进制文​​件,这在现代 C 实现中很常见。

#include <inttypes.h>
#include <stdint.h>
#include <stdio.h>


int main(void)
{
    float a = 12.5;
    printf("%" PRIx32 "\n",
        (union { float f; uint32_t u; }) { a } .u);
    return 0;
}
于 2013-07-05T01:37:22.790 回答