后面到底发生了什么?
int a=10,b=5,c=3;
b!=!a;
c=!!a;
为什么 b
和 c
的值分别为 5 和 1?
b
5
,因为您已经为其分配了该值并且从未更改过它,因为
b!=!a;
。只是一个你不做任何事情的条件,而不是任何形式的分配。
c
是1
,因为a
是10
的,!10
是0
的,而!0
是1
的,所以!!a
是1
的(a
是10
)。
你已经得到了问题的答案,但为了更深入地了解为什么会这样,让我在这里加上我的两分钱。
像这样的表达式
b!=!a;
与
b != !a;
因为在翻译阶段使用了最大蒙克规则。基本上,这表示在创建构造时应从输入中选择最长的标记(显然,有效/有意义)。
遵循此原则,!
和=
一起考虑以形成完全有效的运算符!=
并且表达式解析为
b != !a;
多
b ! = !a; //or anything else.
这就是为什么,正如您可能认为的那样,没有任务。
也就是说,!
是一个一元运算符,它不会更改操作数的值。因此,综合起来,您的代码本质上与
int a=10,b=5,c=3;
c=!!a; //double negation
因此,a
和b
不变,c
是1
(因为!!10
== !0
== 1
)