【发布时间】:2010-01-28 12:37:17
【问题描述】:
我刚刚遇到了一段代码,它不仅可以编译,而且给出了预期的结果(其中 x 是一个整数值):
int y = (int)(0.5 * x * x + + + 0.6 * x + 1.2);
我花了一段时间才弄清楚发生了什么,我必须说这是一个有趣的操作员问题。在不编译程序的情况下,以下操作的结果是什么,为什么?
int a = 1;
int b = 2;
int z = a + + + b;
int z1 = a + - + b;
int z2 = a + - - b;
int z3 = a - - + b;
int z4 = a - - - b;
int z5 = a +- b;
不过,我还有一个问题:标准是否给出了这样的结果,还是特定于编译器?
说明: 因为 + 和 - 运算符之间有空格,所以 "++ +" 序列没有编译为 "++ +",而是作为右成员上的一元运算符。所以
int y = (int)(0.5 * x * x + + + 0.6 * x + 1.2);
实际上给出:
int y = (int)(0.5 * x * x + 0.6 * x + 1.2);
这是预期的结果。
所以,
z = a + + + b = a + + (+b) = a + (+b) = a + b = 3;
z1 = a + - + b = a + - (+b) = a + (-b) = a - b = -1;
z2 = a + - - b = a + - (-b) = a + (+b) = a + b = 3;
z3 = a - - + b = a - - (+b) = a - (-b) = a + b = 3;
z4 = a - - - b = a - - (-b) = a - (+b) = a - b = -1;
z5 = a +- b = a + (-b) = a - b = -1;
【问题讨论】:
-
给出“预期值”?它是否会在屏幕上打印一条信息说“可以编译,但我不知道你为什么想要它”?这就是我所期望的。
-
对人工编码测验不太感兴趣,谢谢。
-
如果结果真的符合预期,你就不会问这个问题了。
-
找出谁写的,踢他们,告诉他们不要再这样做了。为什么人们会写这种东西?
-
@Prasoon 代码中没有“+++” - 这些大多是一元 + 和 - 操作。