#include <stdio.h>
void main()
{
int x,y,z;
x=y=z=-1;
x++||++y||++z;
printf("x=%d\ty=%d\tz=%d\n",x,y,z);
}
运算结果为啥是 x=0 y=-1 z=-1 ?
#include <stdio.h>
void main()
{
int x,y,z;
x=y=z=-1;
x++||++y||++z;
printf("x=%d\ty=%d\tz=%d\n",x,y,z);
}
运算结果为啥是 x=0 y=-1 z=-1 ?
首先,x,y,z都赋值为-1;
然后,执行第六行代码时,只执行了x++,因为||为短路或运算符,即如果前面的表达式如果为真, 则后面的表达式就不执行了,因为x=-1,不等于0,为真,所以后面的 ++ y 和 ++z,都不执行,所以x++后变为0,y和z还是第一次赋的值-1。
测试如下:
参考链接:
https://blog.csdn.net/xkdlzy/article/details/109108957
https://blog.csdn.net/zhangchiytu/article/details/7080262
#include <stdio.h>
int main()
{
int x,y,z;
x=y=z=-1;
// https://blog.csdn.net/xkdlzy/article/details/109108957
// https://blog.csdn.net/zhangchiytu/article/details/7080262
// 因为||为短路或运算,即第一个表达式的值如果为真,则后面的表达式就不执行了
// 然后 x=-1,不等于0,其值为真,所以下面的代码只执行前面的x++,后面的不执行
// 这里,x++后,变为0, y和z还是第一次赋的值-1
x++||++y||++z;
printf("x=%d\ty=%d\tz=%d\n",x,y,z);
if(x){
printf("x=%d,x为真\n",x);
}
if(y){
printf("y=%d,y为真\n",y);
}
return 0;
}
