解释这个序列的执行:x = j || i ++&& 1

时间:2014-07-22 03:56:38

标签: c

我在接受C编程的采访时遇到了这个问题。那是:

int X,i=4,j=7;
X=j || i++ && 1;

Xi的价值是多少?

我在编译器上测试了程序,输出是:

X=1 , i =4 

你能解释一下原因吗?

3 个答案:

答案 0 :(得分:6)

这是测试您对运算符优先级(或语言语法,如果您愿意)的了解,并且您知道运算符优先级和评估顺序之间的区别。

该协会是:

X = (j || (i++ && 1));

请注意,优先级通常不等于执行顺序。在这种情况下,我们有以下评估逻辑:

  • 要评估=,我们需要评估其右侧操作数
  • 要评估(j || stuff...),我们首先评估j
  • j不为零,因此(j || stuff...)的结果为1,由于{{1}的短路行为,我们不评估stuff }}
  • 现在我们已确定||的右侧操作数已评估为=,因此请将1分配给1

最终结果:XX == 1i不变。

答案 1 :(得分:5)

这里只检查j的值是否为真。 如果j为真,则将值1(真)分配给x,然后程序退出

注意i ++未执行,
这也被称为C编程中的短路

 int X,i=4,j=7;

 X=j || i++ && 1;

x  = j != 0 // is what is executed

如果j为0,则执行(i ++&& 1)

答案 2 :(得分:1)

它读起来像这样:

X = (j != 0 || (i++ != 0 && 1 != 0))

在这种情况下,j是" true" (!= 0),因此表达式j!= 0的布尔结果被赋值给X. 无需验证比较器的右手(i ++!= 0&& 1!= 0),因为左侧已经评估为真。

i ++永远不会被执行所以我保留其原始值