认为,float a = 12.5;
我知道它的十六进制表示是0×41480000
. 但是如何float
通过程序打印它的十六进制表示?
使用带指针的类型双关语将浮点数视为整数。
float a = 12.5;
long *aint = (long *)&a;
printf("0x%lx\n", *aint);
您也可以只使用强制转换,而不是添加变量:
printf("0x%lx\n", *(long *)&a);
自 C99 以来,有一个%a
说明符基本上可以做到这一点。它为您提供十六进制和指数的尾数表示。这里唯一的障碍是它double
代替float
, 但这不应该打扰你。
在 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;
}