This question already has answers here:
How to get the sign, mantissa and exponent of a floating point number
(8个答案)
4年前关闭。
使用数据类型“联合”,我可以将浮点数转换为整数。像这样:
此代码的结果是:
但是,如何从该值“ 1065437102”中获取有关它所表示的浮点数的信息。
例如:它存储并定位“点”(以2为基的固定点)的32位数字?
编辑:在这里问这个问题的答案-> How to get the sign, mantissa and exponent of a floating point number
如果您想了解floating point的实际机器表示,则它是特定于实现的(即processor和ABI)。阅读有关IEEE floating points(大多数处理器正在使用它们)和endianess的信息。也许您想要标准的舍入功能,例如round,或分解frexp之类的函数。
顺便说一句,我认为C标准不能保证
(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的实际机器表示,则它是特定于实现的(即processor和ABI)。阅读有关IEEE floating points(大多数处理器正在使用它们)和endianess的信息。也许您想要标准的舍入功能,例如round,或分解frexp之类的函数。
顺便说一句,我认为C标准不能保证
int
和float
具有相同的大小和对齐方式,因此您的union
技巧是特定于实现的(但是,它在x86_64 / Linux系统上确实有效)。关于c++ - 如何解释int中分配的浮点数的内存以模拟乘法? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34562376/
10-09 13:12