mshd.net
当前位置:首页 >> 设有以下程序段int x=2,y=2,z=0,A; A=++x||++y&&z+... >>

设有以下程序段int x=2,y=2,z=0,A; A=++x||++y&&z+...

int x=2,y=2,z=0,a; a=++x||++y&&z++; //上面等价于 x++; a= x || (++y&&z++); 由于x>0, 而右边是 || 所以 不会运行 (++y&&z++) printf(″%d,%d,%d\n″,x,y,z); //结果是 3,2,0

&&优先级高于||,所以可以这样写: a=++x||(++y&&z++); a=3||(3&&0); a=3||0; a=1; z++遇;号才自加,++x和++y先进行自加。 x=3,y=3,z=1;

3,2,0 因为 || 运算符检测到第一个表达式结果为 true(非零值返回 true) 时会忽略后面的表达式。

3,2,0

#includevoid main(){ int x,y,z;//首先声明 x=y=z=0;//赋值z=0,y=z,x=y if(++x||++y&&++z)//首先++x,x=1,所以||(或)之后的语句不论为1还是0都不影响结果,所以不会算//&&(与)的优先级高于||(或),所以后面可以看做一个整体 printf("x=%d,y=...

应该是1,0,1吧?因为&&的优先级比||高,所以 x++&&y++||z++;被解释为( x++&&y++)||z++;。由于x++为0是“假”,所以不再执行y++;又由于||前的结果为“假”,所以还要再执行z++才能确定整个表达式的值。故只执行了x++和z++,所以最后输出结果是1,0,1...

#includefun(intx){inty=0;staticintz=3;z++;++y;printf("%d",z);return(x+y+z);}intmain(){inti,x=2;for(i=0;i

0 ++x是1 ||的运算方式是只要前面为1,则后面不进行运算,结果肯定唯一 ++y && ++z这些实质上是没有运行的语句

x=1 y=0 z=0 从左向右执行 1.++x 导致x=1 2. 1||任何表达式,都不用计算了所以 ++y和++z都没有执行

相当于: if ( x>y ) { z=x; x++; } else { z=y; y++; } 所以运行完成后:x=1 y=3 z=2

网站首页 | 网站地图
All rights reserved Powered by www.mshd.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com