使用后缀/前缀表达式

时间:2015-07-26 11:58:52

标签: java algorithm

我理解前缀/后缀,没有必要打扰运算符的优先级。 但是我们在哪里使用前缀/后缀表达式? 它们是由编译器内部转换的吗? 有没有办法在前缀/后缀中编写表达式,编译器会为我评估它?

3 个答案:

答案 0 :(得分:1)

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

Postfix和前缀运算符就像二元运算符,但它们只能处理一个操作数。

后缀增量(在评估变量后发生增量):

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

我认为我已经正确地理解了这个问题,但我不确定你对编译器的意思是什么"评估"他们"为你"。

答案 1 :(得分:0)

很少有语言使用后缀表示法(我所知道的唯一一种是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可理解的指令。

答案 2 :(得分:0)

相关问题