c语言中浮点数的十六进制表示

时间:2013-07-04 03:59:36

标签: c floating-point

假设float a = 12.5;

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

3 个答案:

答案 0 :(得分:2)

使用带有指针的类型punning将float视为整数。

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

您也可以只使用强制转换来执行此操作,而不是添加变量:

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

答案 1 :(得分:1)

从C99起,%a说明符基本上就是这样。它给出了十六进制尾数和指数的表示。这里唯一的障碍是它为double代替float,但这不应该打扰你。

答案 2 :(得分: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;
}