逻辑运算符中的混淆

时间:2013-11-19 12:28:23

标签: c logical-operators

x,y& z的修改后的值是什么,这是一个C语言程序? 请问,Exaplain为什么?

main()
{
  int x,y,z;
  x=y=z=1;
  z=++x||++y&&++z;
  printf("x=%dy=%dz=%d",x,y,z);


}

1 个答案:

答案 0 :(得分:2)

只有x被修改,其值变为2。这背后的原因是逻辑运算符||的短暂的cicuiting行为 编译器将z=++x||++y&&++z;解释为

z = ++x || (++y&&++z);   

因为&&优先于||。 由于x1,即||的第一个子表达式为真,因此不会检查(并评估)其他子表达式。
注意:您可能会收到某些编译器的警告

[Warning] operation on 'z' may be undefined [-Wsequence-point]  

这是因为您无法在两个序列点之间修改变量两次。但是在上面的代码中z++永远不会被评估,所以它的行为不是未定义的。