Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.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 后缀/前缀表达式的使用_Java_Algorithm - Fatal编程技术网

Java 后缀/前缀表达式的使用

Java 后缀/前缀表达式的使用,java,algorithm,Java,Algorithm,我理解在前缀/后缀中,不需要担心运算符的优先级。 但是我们在哪里使用前缀/后缀表达式呢? 它们是否由编译器内部转换? 是否有一种方法可以用前缀/后缀编写表达式,然后编译器为我计算它?编辑:Ff您实际上是在谈论后缀(RPN)表示法,那么没有,编译器对表达式使用中缀表示法。您可以编写一个将RPN表达式转换为中缀表达式的算法,请尝试 后缀和前缀运算符与二进制运算符类似,但它们只对一个操作数起作用 后缀增量(该增量在计算变量后出现): 前缀增量: int x = 1; int y = ++x; // y

我理解在前缀/后缀中,不需要担心运算符的优先级。 但是我们在哪里使用前缀/后缀表达式呢? 它们是否由编译器内部转换?
是否有一种方法可以用前缀/后缀编写表达式,然后编译器为我计算它?

编辑:Ff您实际上是在谈论后缀(RPN)表示法,那么没有,编译器对表达式使用中缀表示法。您可以编写一个将RPN表达式转换为中缀表达式的算法,请尝试

后缀和前缀运算符与二进制运算符类似,但它们只对一个操作数起作用

后缀增量(该增量在计算变量后出现):

前缀增量:

int x = 1;
int y = ++x; // y = 2 and before the assignment occurs x = 2
int z = x; // z = 2
适用于递增运算符的规则也适用于递减运算符

前缀NOT(反转布尔表达式):


我想我已经正确地理解了这个问题,但我不确定您对编译器“评估”它们是什么意思。

很少有语言使用后缀符号(我所知道的唯一一种是PostScript),但生成的CPU指令与中缀符号相同:

a = (3 + 4) * 5

将被转换(在一个虚构的、非常简单的指令集中):


您的CPU不关心初始符号,它只接受一组«基本»指令,因此编译器必须将您使用的符号转换为您的CPU可以理解的指令。

我怀疑前缀和后缀操作以及符号在当今理论中最有用,但它们已经被“真正”使用。看,例如,和

我真的不明白你在问什么。这些类型的表达式与任何其他表达式一样:当您认为使用它们是一个好主意时使用它们,编译器将它们编译成字节码,并在运行时对其进行计算。我的意思是,在我的代码中,我可以编写包含两个以上运算符的前缀/后缀表达式吗?同样,我不明白您的意思。试试看,或者至少让我们看看你的代码是什么意思?如果计算机不编译,编译器就不会破坏它。它会告诉你它编译了,或者没有编译。然后你就会知道了。你是在谈论前缀/后缀运算符,比如
x++
,还是后缀符号(比如反向波兰符号),比如
*5+34
?Java不支持这些类型的表达式。
boolean a = true;
boolean b = !a; // b = false, a = true
a = (3 + 4) * 5
a = * + 3 4 5
add r0 3 4   # r0 =  3 + 4
mul r1 r0 5  # r1 = r0 * 5