【发布时间】:2016-08-04 18:36:25
【问题描述】:
第一部分:
i=j=k=1;
m = ++i && ++j || ++k;
printf("%d, %d, %d, %d\n", i, j, k, m);
输出:2、2、1、1
第一部分很容易理解,这里++i && ++j先执行,这是真的(并且i和j的递增值)所以不需要检查下一部分的OR运算(不需要k的递增值)。
第二部分:
i=j=k=1;
m = ++i || ++j && ++k;
printf("%d, %d, %d, %d\n", i, j, k, m);
输出:2、1、1、1
第二部分让人难以理解,这里++i || ++j首先执行,其中++i为真(并增加i的值,因为OR运算所以不需要增加j的值)。接下来在这里执行AND操作应该是k=2的增量值(但仍然是k print 1的值)。
亲爱的利他主义者,请解释一下第二部分发生了什么。
【问题讨论】:
-
true || <whatever> == true对于whatever的任何值。如果是这样,为什么还要打扰whatever? -
你最喜欢的 C 书怎么说?或者 C 的任何操作员概述?你有没有尝试过自己先回答这个问题?
-
不确定 ++j && ++k 是否先执行,因为运算符优先级。
标签: c++ c expression logical-operators