JVM字节码浮动否定:不允许但可能吗?

use*_*443 1 java floating-point jvm bytecode

在这些日子里,我正在尝试研究JVM字节码.我发现FNEG在维基百科上描述了操作码:use to negate a float.到底有什么好处呢?我试图在普通Java代码中对变量进行否定,Eclipse报告错误,即对于float类型的参数,否定运算符是未定义的.那有什么用呢?我怎么用呢?

tb-*_*tb- 6

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

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

}
Run Code Online (Sandbox Code Playgroud)

参见3:fneg,标准javac.

  • @PeterLawrey但Java确实有三个运算符,在问题中使用的术语"否定"可以合理地应用,一元 - ,〜,和!如果问题包含失败的源代码,那将会有所帮助. (2认同)