a=5;b=10;a----------------++++++++++++++++++b
# Output: 15
以上是python脚本的输出。 你能解释它是如何工作的吗?我很惊讶它的工作原理并给出了答案!!
然而,类似的这样的表达式在Java,C,C ++中不起作用 例如:
a=10;
b=5;
System.out.println(a---b);//error!!
cout<<a---b;//error
printf("%d\n",a---b);//error
这是否与编译器有关 - 词法分析器/句法分析器? 我理解编译器采用了“最左边,最急切和最贪婪”的方法,但我并不完全理解在这种情况下它是如何工作的。
答案 0 :(得分:6)
在Python中,那是
a - ---------------++++++++++++++++++b
即从---------------++++++++++++++++++b
中减去a
。
前缀-
,否定,更改数字符号,前缀+
不执行任何操作。
例如:
>>> -+2
-2
>>> +-2
-2
>>> --2
2
由于有15个否定,a - ---------------++++++++++++++++++b
相当于a - -b
,即a + b
。
Java,C和C ++具有前缀和后缀--
和++
(递减和递增)运算符,并且通过&#34;最大咬合规则&#34;,您的表达式将读作
(((((((((((((((((a--)--)--)--)--)--)--)--)++)++)++)++)++)++)++)++)++) b
即使a
上的这些操作合法,也会像a b
一样无意义。
(请注意,a---b
有效;它表示a-- - b
。)
有关递增和递减运算符的详细信息,请参阅任何合适的书籍。