【发布时间】:2011-07-17 10:03:41
【问题描述】:
我想将浮点数的存储转换为整数('number'值不需要相等)。
如果一个浮点数(例如 10),用二进制表示(至少在我的实现中)为:
01000001001000000000000000000000
那么它应该(也在我的实现中)表示整数值 1092616192。
我目前正在通过以下方式进行此操作:
union UNFI {
float a;
int b;
};
UNFI n;
n.a = 10;
int bits = n.b; // foo!
for (int i=31; i>=0; --i) {
bool bit = ((bits >> i) & 1);
std::cout << bit;
}
这实现了我想要的,但它本质上是未定义的行为。因此,我想知道实现这一结果的“正确”方式是什么。
来自 C99 标准:
With one exception, if the value of a member of a union object is used when the most recent store to the object was to a different member,the behavior is implementation-defined.
这不是未定义的行为吗?
【问题讨论】:
-
你想要达到的结果是什么?只是输出浮点数的二进制表示?
-
部分的主要目的是将二进制文件从浮点数转换为整数数据类型;反之亦然(取决于解决方案的复杂性)。
-
你所说的“正确方式”是什么意思?你的意思是“跨平台”?很难理解您的问题。
-
@Daniel 为什么不简单地进行正常的 float->int 转换?你想实现什么不同?
-
我已经概述了这一点,我不想做演员表。我不关心有问题的实际数据类型,只关心存储在内存中的位。
标签: c++ floating-point integer bitwise-operators