【问题标题】:Postfix and prefix operators in C and Java producing different results [duplicate]C和Java中的后缀和前缀运算符产生不同的结果[重复]
【发布时间】:2015-08-15 10:23:06
【问题描述】:

我认为基本算术运算符在大多数语言中具有相同的优先级。但是对于下面的代码sn-p-

int a = 5;
a = --a + a++;
//print a

C 编译器 (GNU GCC) 给我的结果是 9,而在 java 中我得到 8。这是怎么回事? 在我看来应该是 8 ( 4 + 4 )

【问题讨论】:

  • 这是未定义的行为是 C。在同一执行行中更改变量不止一次。
  • 运算符的优先级可能相同。这并不意味着操作数按任何特定顺序进行计算。
  • 更多垃圾。从好的方面来说,我们已经有一段时间没有这种特殊的污水流出了。请停止写这样的废话并将其发布在 SO 上以便“解释”。如果您的教授/助教写了废话,请告诉他们停止。
  • Java 强制从左到右计算表达式并立即计算副作用。 C 没有。这个表达式在 Java 中定义良好,但在 C 中没有。

标签: java c arithmetic-expressions postfix-operator prefix-operator


【解决方案1】:
a = --a + a++;

这在 C 中调用 未定义的行为。

C99 §6.5:“2.在前一个和下一个序列点之间,对象的存储值最多只能通过表达式的评估修改一次。此外,应仅读取先验值以确定要存储的值。”

在此您将a 的值在上一个和下一个sequence point 之间更改两次,因此结果可以是任何值。

【讨论】:

  • 投反对票的原因?
  • 喂家庭作业吸血鬼。这种垃圾或类似的东西经常被张贴,以至于我们已经厌倦了。
  • @MartinJames 嗯……有道理。下次会记得的。
猜你喜欢
  • 2018-01-30
  • 1970-01-01
  • 2016-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-29
相关资源
最近更新 更多