Float.intBitsToFloat如何工作?

Arc*_*ius 4 java floating-point binary

任何人都可以解释我或链接一些有用的资源,以了解Java方法背后的算法Float.intBitsToFloat(int)

rli*_*bby 7

Java使用IEEE 754浮点. Float.intBitsToFloat(int)通过解释其参数的32位来工作,就好像它们以这里描述的格式指定了32位浮点数.

Double.longBitsToDouble(long)对于64位浮点数的工作方式类似,如此处所述.

在C中你可能会达到同样的效果:

#include <stdint.h>

union int_float_bits {
    int32_t int_bits;
    float float_bits;
};

float intBitsToFloat(int32_t x)
{
    union int_float_bits bits;
    bits.int_bits = x;
    return bits.float_bits;
}
Run Code Online (Sandbox Code Playgroud)

(虽然从技术上讲,这将是未定义的行为,实际上它实际上总是按预期工作.)


Bob*_*ers 6

JDK6文档都相当不错,而源本身是非常有启发性(它只是使用一个C联合):

JNIEXPORT jfloat JNICALL
Java_java_lang_Float_intBitsToFloat(JNIEnv *env, jclass unused, jint v)
{
    union {
        int i;
        float f;
    } u;
    u.i = (long)v;
    return (jfloat)u.f;
}    
Run Code Online (Sandbox Code Playgroud)