This question already has answers here:
How to get the sign, mantissa and exponent of a floating point number
                                
                                    (8个答案)
                                
                        
                                4年前关闭。
            
                    
使用数据类型“联合”,我可以将浮点数转换为整数。像这样:

#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”中获取有关它所表示的浮点数的信息。
例如:它存储并定位“点”(以2为基的固定点)的32位数字?

编辑:在这里问这个问题的答案-> How to get the sign, mantissa and exponent of a floating point number

最佳答案

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


只需使用C强制转换,例如(int)f被编译为执行转换的快速代码。如果您想到的是定点数(C99本身没有),您可以执行例如

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


如果您想了解floating point的实际机器表示,则它是特定于实现的(即processorABI)。阅读有关IEEE floating points(大多数处理器正在使用它们)和endianess的信息。也许您想要标准的舍入功能,例如round,或分解frexp之类的函数。

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

关于c++ - 如何解释int中分配的浮点数的内存以模拟乘法? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34562376/

10-09 13:12