0

在一个非常具体的任务中,我被迫将 a 存储float在一个int变量中(稍后将被持久化,然后再读回)。所有的操作都是as 完成的float,即一个可能的场景如下:

  1. 计算float值并使用它
  2. 将其存储为int
  3. 稍后,阅读int,并float立即将其转换为
  4. 再次使用该float

也就是说,int纯粹是一种存储格式。我正在考虑用它intBitsToFloat来恢复我的float价值。在这种情况下,导出float值的正确方法是什么?floatToIntBits()还是floatToRawIntBits()?我在 javadoc 或其他任何地方都找不到它。

4

2 回答 2

3

实际上,这两种方法的区别在 Float API 中有很好的描述,这些方法仅对 NaN 产生不同的结果,但两种结果都是有效的,对于您的任务,您可以使用其中任何一种。NaN 可能有多种表示形式s111 1111 1axx xxxx xxxx xxxx xxxx xxxx,请参阅http://en.wikipedia.org/wiki/NaN。floatToIntBits 始终返回0111 1111 1100 0000 0000 0000 0000 0000NaN,而 floatToInt 则按原样返回 NaN 二进制表示。

于 2013-10-03T04:24:01.397 回答
1

我设法在 Android 源代码中找到它。的适当对应物intBitsToFloat()floatToRawIntBits()。他们的C源代码如下:

static jint floatToRawBits(JNIEnv* env, jclass clazz, jfloat val)
{
    Float   f;
    f.f = val;
    return f.bits;
}

static jfloat intBitsToFloat(JNIEnv* env, jclass clazz, jint val)
{
    Float   f;
    f.bits = val;
    return f.f;
}
于 2013-10-03T03:59:49.970 回答