当前位置: 代码迷 >> java >> 后缀/前缀表达式的使用
  详细解决方案

后缀/前缀表达式的使用

热度:24   发布时间:2023-07-16 17:46:37.0

我了解在前缀/后缀中,无需担心运算符的优先级。 但是我们在哪里使用前缀/后缀表达式? 它们是由编译器内部转换的吗? 有什么办法可以在前缀/后缀中编写表达式,然后编译器为我评估它?

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

后缀和前缀运算符就像二进制运算符一样,但是它们仅作用于一个操作数。

后缀增量(增量在变量求值后发生):

int x = 1;
int y = x++; // y = 1 but after the assignment occurs x = 2
int z = x; // z = 2

前缀增量:

int x = 1;
int y = ++x; // y = 2 and before the assignment occurs x = 2
int z = x; // z = 2

适用于增量运算符的规则也适用于减量运算符。

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

boolean a = true;
boolean b = !a; // b = false, a = true

我想我已经正确理解了这个问题,但是我不确定您对编译器“为您评估”的含义。

很少有语言使用后缀表示法(我所知道的唯一一种是PostScript),但是最终的CPU指令与后缀表示法相同:

a = (3 + 4) * 5

要么

a = * + 3 4 5

将被转换(以一个虚构的,非常简单的指令集):

add r0 3 4   # r0 =  3 + 4
mul r1 r0 5  # r1 = r0 * 5

您的CPU不在乎初始符号,它只接受一套“基本”指令,因此编译器必须将您使用的符号转换为CPU可以理解的指令。

我怀疑前缀和后缀运算符和符号对于当今的理论最有用,但它们已被“实际使用”。 例如参见 , , 和

  相关解决方案