C语言,为何z=1? void main() { int x,y,z; x=y=z=1; ++x&&++y||--z; printf("%d,%d,%d",x,y,z);

不懂这一块:++x&&++y||--z
2025-04-08 08:57:17
推荐回答(2个)
回答1:

逻辑判断啊,很简单啊
不过有一个短路一说,在c基础中好像没有介绍。我当年学的时候就没有注意到,老师也没有说

道理是,c在逻辑判断中,为了提高运算效率,节省计算机资源,在逻辑判断中有个设置
如c=a&&b(ab都为表达式),如果ab有一个为零,那么c=0。所以只要a=0,那么后面的b就没有必要计算了,你说是不是啊。所以在c中,这个短路的说法就是,a=0,那么b就不计算
c=a||b也是一样的道理,只要a=1,那么b也不计算

++x&&++y||--z
这个当中,xy运算完都是2,那么||前面的是非零了,所以--z就不计算了
x=2,y=2,z=1

回答2:

c语言中逻辑表达式是短路求值,++x&++y为真,则不必再执行(--z)也可知其与任何数的或(||)也为真,所以不执行(--z)这一步,所以z的值还是1。