-1
public class main {

public static void main(String[] args) {
  int x=20,y=35;       
  x = y++ + x++;
  y = ++y + ++x;
  System.out.printf("%d %d\n",x,y);
}
//Output : 56,93

#include<stdio.h>
void main()
{
  int x=20,y=35;       
  x = y++ + x++;
  y = ++y + ++x;
  printf("%d %d ",x,y);
}
//Output : 57 94

根据运算符优先级规则,我通过 Java 代码得到的任何输出都是正确的,但是在“C”代码中执行相同的输出时,它会将输出值增加 1。我使用的是 ubuntu 12.04 64 位操作系统。

4

1 回答 1

1

这不是一回事,因为 Java 和 C 是不同的语言。

Java 中的后自增行为被定义为在计算完表达式后执行自增。

C 中的行为是未定义的,但通常遵循优先顺序。

注意:评估顺序和优先级是不同的东西,这对于后递增/递减和快捷布尔操作更为明显。

例如

Sting s = null;

if (s == null || !(s.length() > 0))

在这种情况下!具有最高优先级,但实际上永远不会被评估,因为较低的优先级会||阻止它。

优先级仅确定隐含括号的位置,但仅建议如何评估表达式。

于 2013-09-03T08:59:04.457 回答