两个单独的运算符一起编写时如何解析/计算



后面到底发生了什么?

int a=10,b=5,c=3;
b!=!a;
c=!!a;

为什么 bc 的值分别为 5 和 1?

b 5,因为您已经为其分配了该值并且从未更改过它,因为

b!=!a;

。只是一个你不做任何事情的条件,而不是任何形式的分配。

c1,因为a10的,!100的,而!01的,所以!!a1的(a10)。

你已经得到了问题的答案,但为了更深入地了解为什么会这样,让我在这里加上我的两分钱。

像这样的表达式

 b!=!a;

b != !a;

因为在翻译阶段使用了最大蒙克规则。基本上,这表示在创建构造时应从输入中选择最长的标记(显然,有效/有意义)。

遵循此原则,!=一起考虑以形成完全有效的运算符!=并且表达式解析为

b != !a;

b ! = !a;  //or anything else.

这就是为什么,正如您可能认为的那样,没有任务

也就是说,!是一个一元运算符,它不会更改操作数的值。因此,综合起来,您的代码本质上与

int a=10,b=5,c=3;
c=!!a;  //double negation

因此,ab不变,c1(因为!!10 == !0 == 1

最新更新