如何解释在int中分配的float的内存来模拟乘法?

时间:2016-01-02 03:43:03

标签: c++ c unions

使用数据类型“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

1 个答案:

答案 0 :(得分:1)

  

我想获取此信息,因为我想尽快将浮点数转换为固定点。

只需使用C版画,例如(int)f编译为执行转换的 fast 代码。如果你想到固定点数(C99本身没有)你就可以做到。

int percent = (int)(f*100.0);

如果您想了解floating point的实际机器表示,则具体是实现(即processorABI)。阅读IEEE floating points(大多数处理器正在使用它们)&amp; endianess。也许你想要标准的舍入函数,例如round,或分解frexp等函数。

顺便说一句,我不认为C标准保证intfloat具有相同的大小和对齐方式,因此您的union技巧是特定于实现的(它确实但是&#34;在x86_64 / Linux系统上工作&#34;。