int x,y,z;x=y=z=-1;++x&&++y||++z是如何运行的

如题所述

int x,y,z;x=y=z=-1;++x&&++y||++z的运行过程是这样的:

++x时,先取x的值自增后为0(为假)。由于运算符为&&(逻辑与)所以后面的++y已经不需要做了。

又由于后面的运算符为||,所以还需检测后面的值。于是做++z的检测。z先自增,变为0(为假)。参与“逻辑或”的两个值都是假,所以,整个表达式的值为假。

又由于x和z两个变量的值参与了检测,自增为0,而y没有检测,值仍为-1。


上面的分析可以用一个简单程序加以验证:

温馨提示:内容为网友见解,仅供参考
第1个回答  2010-06-17
首先是给x,y,z均赋值为-1
接下来++x是对x先加值后使用,则此时x=0
然后就是“与操作”(由于“与操作”的优先级高于“或操作”,所以先进行:++x&&++y),这时候由于“&&”前面的值已经是0了,所以就跳过y的自增,y的值不变,仍是-1
接下来进行“或操作”,z自增变成z=0,然后与前面的逻辑结果0进行“或操作”,最终得到的结果是0,x=0,y=-1,z=0
至于“&&”操作符的快速计算方式:当“&&”前面的值是0的时候,就不进行“&&”后面的运算了,因为0与任何数的“与操作”结果都是0,所以就没必要计算后面的了
同样的,存在“||”的快速计算:当“||”前面的值是1的时候,就不进行“||”后面的运算了,因为1与任何数的“或操作”结果都是1,所以就没必要计算后面的了本回答被网友采纳
第2个回答  2010-06-17
x=y=z=-1可以给x,y,z同时赋值为-1
接下来++x是对x先加值后使用,则此时x=0,同理++y也是先加值后使用,此时y=0,++z也是一样的,所以z=0,那么再进行逻辑运算,由于x和y都是0了,所以做与运算结果还是0,而z也是0,因此再与z做或运算还是0
所以++x&&++y||++z为0
第3个回答  2020-01-01
int
x,y,z;
x=y=z=-1;xyz都-1
++x&&++y||++z相于(++x&&++y)||(++z)先++x
x=0
则&&右边++y执行
表达式(++x)&&(++y)=0
所x=0
y=-1
接着
0||++z
算右边++z
z=0
整结0
x=0
y=-1
z=0
相似回答