使用数据类型“union”,我可以将float转换为int。像这样:
#include <stdio.h>
#include <stdlib.h>
int float_as_int(float f)
{
union { int i; float f; } u;
u.f = f;
return u.i;
}
int main() {
float f = 1.01;
printf("float = %f\n", f);
printf("int = %d\n", float_as_int(f));
system("pause");
}
此代码的结果是:
float = 1.010000
int = 1065437102
但是,从此值“1065437102”我如何获得有关它所代表的浮点数的信息。 例如:它存储的32位数字和定位“点”(基数2上的固定点)?
编辑:此处询问了该问题的答案 - &gt; How to get the sign, mantissa and exponent of a floating point number
答案 0 :(得分:1)
我想获取此信息,因为我想尽快将浮点数转换为固定点。
只需使用C版画,例如(int)f
编译为执行转换的 fast 代码。如果你想到固定点数(C99本身没有)你就可以做到。
int percent = (int)(f*100.0);
如果您想了解floating point的实际机器表示,则具体是实现(即processor和ABI)。阅读IEEE floating points(大多数处理器正在使用它们)&amp; endianess。也许你想要标准的舍入函数,例如round,或分解frexp等函数。
顺便说一句,我不认为C标准保证int
和float
具有相同的大小和对齐方式,因此您的union
技巧是特定于实现的(它确实但是&#34;在x86_64 / Linux系统上工作&#34;。