如何提取 JAVA 中的 IEEE 754 浮点表示
How to extract the IEEE 754 float representation in JAVA
我在两个整数变量中获取 IEEE754 格式的浮点值。整数为 13107 和 17184。需要交换整数。现在,我如何从这两个整数中提取浮点值?。这些整数的浮点值将等于 160.19(大约)。我的代码仅提供 1.1 的结果 ..
int buffer = 0;
int float_value = 0;
float result = 0;
float value = 0, mantissa = 0;
if (swap == FALSE) {
float_value = rec_buf;
float_value = float_value << 16;
buffer = rec_buf1;
float_value = (float_value | buffer);
}else{
buffer = rec_buf1;
float_value = rec_buf;
float_value = float_value << 16;
float_value = (float_value | buffer);
}
String a = Integer.toBinaryString((int)float_value);
value = Float.valueOf(a);
谁能帮我解决这个问题
如果您在 int
中有 float
的 32 位 IEEE-754 表示,您可以使用 Float.intBitsToFloat
转换回 float
。
这里有一个测试程序来澄清问题。我建议在您的代码中使用类似的打印输出来检查发生了什么,直到它正常工作。
public class Test {
public static void main(String[] args) {
System.out.println(Integer.toHexString(Float.floatToIntBits(160.19f)));
int a = 13107;
System.out.println(Integer.toHexString(a));
int b = 17184;
System.out.println(Integer.toHexString(b));
int bits = b << 16 | a;
System.out.println(Integer.toHexString(bits));
System.out.println(Float.intBitsToFloat(bits));
}
}
输出:
432030a4
3333
4320
43203333
160.2
前三行输出是为了确保输入值是正确的,我知道将它们放在哪一边。从一开始,我就知道近似值的位模式。看着那个和输入的十六进制位模式告诉我他们需要走哪条路。第四行显示了生成的位模式。最后,我使用了 Float.intBitsToFloat,正如 中所建议的那样,得到了浮点数。
我在两个整数变量中获取 IEEE754 格式的浮点值。整数为 13107 和 17184。需要交换整数。现在,我如何从这两个整数中提取浮点值?。这些整数的浮点值将等于 160.19(大约)。我的代码仅提供 1.1 的结果 ..
int buffer = 0;
int float_value = 0;
float result = 0;
float value = 0, mantissa = 0;
if (swap == FALSE) {
float_value = rec_buf;
float_value = float_value << 16;
buffer = rec_buf1;
float_value = (float_value | buffer);
}else{
buffer = rec_buf1;
float_value = rec_buf;
float_value = float_value << 16;
float_value = (float_value | buffer);
}
String a = Integer.toBinaryString((int)float_value);
value = Float.valueOf(a);
谁能帮我解决这个问题
如果您在 int
中有 float
的 32 位 IEEE-754 表示,您可以使用 Float.intBitsToFloat
转换回 float
。
这里有一个测试程序来澄清问题。我建议在您的代码中使用类似的打印输出来检查发生了什么,直到它正常工作。
public class Test {
public static void main(String[] args) {
System.out.println(Integer.toHexString(Float.floatToIntBits(160.19f)));
int a = 13107;
System.out.println(Integer.toHexString(a));
int b = 17184;
System.out.println(Integer.toHexString(b));
int bits = b << 16 | a;
System.out.println(Integer.toHexString(bits));
System.out.println(Float.intBitsToFloat(bits));
}
}
输出:
432030a4
3333
4320
43203333
160.2
前三行输出是为了确保输入值是正确的,我知道将它们放在哪一边。从一开始,我就知道近似值的位模式。看着那个和输入的十六进制位模式告诉我他们需要走哪条路。第四行显示了生成的位模式。最后,我使用了 Float.intBitsToFloat,正如