为同样的事情获得不同的结果

时间:2013-09-03 08:55:33

标签: java c operators operator-precedence

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位操作系统。

1 个答案:

答案 0 :(得分:1)

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

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

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

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

e.g。

Sting s = null;

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

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

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