Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:将int读取为浮点,反之亦然,无需隐式转换_Java_Pointers - Fatal编程技术网

Java:将int读取为浮点,反之亦然,无需隐式转换

Java:将int读取为浮点,反之亦然,无需隐式转换,java,pointers,Java,Pointers,我偶然发现了这个关于快速平方根求逆的计算,有几行代码让我对示例代码感兴趣 y = number; i = * ( long * ) &y; i = 0x5f3759df - ( i >> 1 ); y = * ( float * ) &i; 这是用C编写的,在这种情况下是有意义的,但是有没有一种方法可以在没有真正指针的情况下在Java中实现同样的效果呢?例如,您可以使用ByteBuffer(如果必须的话,也可以使用不安全的方法) 你可以做的不是使用ByteB

我偶然发现了这个关于快速平方根求逆的计算,有几行代码让我对示例代码感兴趣

y  = number;
i  = * ( long * ) &y;
i  = 0x5f3759df - ( i >> 1 );
y  = * ( float * ) &i;

这是用C编写的,在这种情况下是有意义的,但是有没有一种方法可以在没有真正指针的情况下在Java中实现同样的效果呢?

例如,您可以使用ByteBuffer(如果必须的话,也可以使用不安全的方法)

你可以做的不是使用ByteBuffer或内存技巧

// y  = number;
float y = number;
// i  = * ( long * ) &y;
int i = Float.floatToRawIntBits(f);
// i  = 0x5f3759df - ( i >> 1 );
i  = 0x5f3759df - ( i >> 1 ); 
// y  = * ( float * ) &i;
y = Float.intBitsToFloat(i);
// y  = number;
float y = number;
// i  = * ( long * ) &y;
int i = Float.floatToRawIntBits(f);
// i  = 0x5f3759df - ( i >> 1 );
i  = 0x5f3759df - ( i >> 1 ); 
// y  = * ( float * ) &i;
y = Float.intBitsToFloat(i);