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