Java 对同一件事得到不同的结果 公共类主{ 公共静态void main(字符串[]args){ int x=20,y=35; x=y+++x++; y=++y+++x; System.out.printf(“%d%d\n”,x,y); } //产出:56,93 #包括 void main() { int x=20,y=35; x=y+++x++; y=++y+++x; printf(“%d%d”,x,y); } //产出:57 94
根据运算符优先级规则,我通过Java代码得到的任何输出都是正确的,但在“C”代码中执行相同的输出时,输出值增加了1。我使用的是ubuntu 12.04 64位操作系统。这不是一回事,因为Java和C是不同的语言 Java中增量后的行为定义为在表达式求值后执行增量 C中的行为未定义,但通常遵循优先顺序 注意:求值顺序和优先顺序是不同的,这对于递增/递减后的布尔运算和快捷布尔运算更为明显 e、 g 在这种情况下,Java 对同一件事得到不同的结果 公共类主{ 公共静态void main(字符串[]args){ int x=20,y=35; x=y+++x++; y=++y+++x; System.out.printf(“%d%d\n”,x,y); } //产出:56,93 #包括 void main() { int x=20,y=35; x=y+++x++; y=++y+++x; printf(“%d%d”,x,y); } //产出:57 94,java,c,operators,operator-precedence,Java,C,Operators,Operator Precedence,根据运算符优先级规则,我通过Java代码得到的任何输出都是正确的,但在“C”代码中执行相同的输出时,输出值增加了1。我使用的是ubuntu 12.04 64位操作系统。这不是一回事,因为Java和C是不同的语言 Java中增量后的行为定义为在表达式求值后执行增量 C中的行为未定义,但通常遵循优先顺序 注意:求值顺序和优先顺序是不同的,这对于递增/递减后的布尔运算和快捷布尔运算更为明显 e、 g 在这种情况下,!具有最高的优先级,但实际上永远不会被计算,因为较低的优先级|会阻止它 优先级仅确定隐含
!
具有最高的优先级,但实际上永远不会被计算,因为较低的优先级|
会阻止它
优先级仅确定隐含括号的位置,但仅建议表达式的计算方式。这在C和C++中是未定义的行为。C代码不是有效的C代码。C中的
main
是否应返回int?@PeterLawrey“在C中,main可以是void或int”这不是我的C99标准副本在第5.1.2.2.1:1条中所说的。什么条款告诉你main()
可以返回void
?@PeterLawrey编译的和标准/非标准的main()
之间可能有区别,根据c标准,应该返回类型int
。
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
Sting s = null;
if (s == null || !(s.length() > 0))