java - JVM 字节码浮点否定 : not allowed but possible?

标签 java floating-point jvm bytecode

<分区>

最近我在研究JVM字节码。我在维基百科上找到了名为 FNEG 的操作码:use to negate a float。到底有什么好处呢?我试图在普通 Java 代码中对变量进行否定,但 Eclipse 向我报告了错误,即否定运算符对于浮点类型的参数是未定义的。那它是做什么用的呢?我该如何使用它?

最佳答案

public class temp {
    public static void main(String[] args) {
        float a = 1.0f;
        a = -a;
        System.out.println(a);
    }
}

javap -c temp给出:

Compiled from "temp.java"
public class temp extends java.lang.Object{
public temp();
  Code:
   0:   aload_0
   1:   invokespecial   #8; //Method java/lang/Object."<init>":()V
   4:   return

public static void main(java.lang.String[]);
  Code:
   0:   fconst_1
   1:   fstore_1
   2:   fload_1
   3:   fneg
   4:   fstore_1
   5:   getstatic       #16; //Field java/lang/System.out:Ljava/io/PrintStream;
   8:   fload_1
   9:   invokevirtual   #22; //Method java/io/PrintStream.println:(F)V
   12:  return

}

参见 3:对于 fneg,标准 javac。

关于java - JVM 字节码浮点否定 : not allowed but possible?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14673596/

相关文章:

java - 使用 AWS Java SDK 获取 EC2 实例 XML 描述?

java - mcforge:无法保留足够的空间

java - Groovy 字符串与 Java 字符串

java - 试图递归地找到数组中第二小的整数java

java - 从串口读取

java - 堆 vs 堆栈 vs 永久空间

java - Linux - Java - VM 初始化期间发生错误

Python 浮点格式 - 类似于 "g",但数字更多

c# - 为什么在声明 float 时需要 "f"?

python - 将字符串列添加到浮点矩阵 NumPy