c语言k=x++&&y++||z++

如题所述

首先弄清楚优先级,这题中++>&&>||
相当于:k=(x++)&&(y++)||(z++)
k=
2
&&
2
||(z++)
k=
1
||(z++)
注意,这里||运算符左边已经是1了,右边是0或1,结果都是1
所以,c语言就优化掉了,不算(z++)了,你可以把他换成k=(z++)||(x++)&&(y++);试试,这时就z=2,x=1,y=1
温馨提示:内容为网友见解,仅供参考
第1个回答  2020-01-24
&&与||为短路运算符,或者称为简洁运算符,也就是说a&&b,如果a为假,则不再计算b。

针对你的问题,k=x++&&y++||z++这个表达式分为三个部分,如果前两个部分为真,则z++就不再运算了,所以z++没有执行,仅执行了x++和y++。

另外,a++和++a也是有区别的,a++是先使用a的值,最后再把a+1的值赋值给a,++a是先把a+1的值赋值给a再使用a的值。
第2个回答  2019-10-15
这样分解:++x||++y&&++z
,
这个表达式中++x

++y&&++z
两者构成“或”表达式。或表达式中两者有一个为真,表达式即为真。在C中,对于或表达式,当第一个表达式为真是,就可以认为真个表达式为真,没必要去计算后面的表达式的值。
如果你真的想要知道到底是为什么?计算机为什么要这样做。建议你看看编译原理中的表达式的翻译方案,你就会懂的。
第3个回答  2019-09-30
||

&&
都有逻辑短路功能
简言之
A
||
B
如果A是真的,B就不会再被计算了。
A
&&
B
如果A是假的B就不会再被计算了
评论有人提到优先级问题,&&的优先级略高于||
因此对于
A||B&&C事实上等价于
A||(B&&C),因此会先计算A的值,如果A为真会跳过(B&&C)的求值过程。
++x||++y&&++z
可以看到
++x
的结果是1,也就是真,所以
||
右边的不会被计算了。
因为逻辑运算的副作用。
逻辑或:仅当第一个操作数的计算结果为
false
(0)
时计算第二个操作数。
在逻辑“或”表达式为
true
时,这将消除对第二个操作数的不必要的计算。
逻辑与:仅当第一个操作数的计算结果为
true
(1)
时计算第二个操作数。
在逻辑“与”表达式为
false
时,这将消除对第二个操作数的不必要的计算。
第4个回答  2020-01-18
因为“左结合律”和“
短路求值
”。
C语言保证逻辑运算的求值顺序是从左往右的。
用括号显示优先级是这样的:
(++x)
||
(++y
&&
++z)
个人觉得,在不影响语意的前提下,把运算过程看成这样∶
(1
&&
++x)
||
(++y
&&
++z)
c中对于逻辑或的运算是只要第一个表达式为真,就不会去算后面的表达式了

C语言++x&&--y&&z++怎么理解?
先将x的值自增1,如果x的新值为0,说明++x返回false,不再执行后续语句(后面y和z的值都不会变),整个表达式也返回false;如果x的新值不为0,继续执行--y,先将y的值自减1,如果y的新值为0,说明--y返回false,不再执行后续语句(后面z的值不会变),整个表达式也返回false;如果y的新值...

简单C语言的问题
对于你这题,先计算x++&&y++,首先x++,x的值开始为0,++后为1,那么最后x的值为1,所以&&的表达式的值为0(因为是x++,而不是++x),那么就不执行y++了,在就是||了,因为&&的值为0,那么就要判断||后面的表达式了,就是z++,z的值原来为0,那么总个||的表达式的值为0,在执行++,那么...

c语言中x+++y+++z++怎么运算
按贪心法规则,这表达式等价为(x++)+(y++)+(z++)。所以其值为x+y+z,然后x、y、z各增1。

c语言中x&y++%3 的运算步骤
x++&&y++ 结果为 0&&0 是0,所以执行 0 ||z++,z++是0,0||0 =0 0&&y++就跳过了y的运算 所以 x=1 y=0 z=1

请问C语言x+++y+++z++是怎么运算的
x+++y+++z++表达式 等价为(x++)+(y++)+(z++)。所以其值为x+y+z,然后x、y、z各增1

C语言中,++x||++y&&++z的意思是?还有++x&&++y&&++z???
1,++x||++y&&++z 先给x + 1,若等于0,计算右边,分别给y和z +1后若不为0整个表达式不为0,若x +1不等于0则不计算右边的表达式;2,++x&&++y&&++z 先给x +1, 若不等于0,计算右边,给y +1若不等于0,计算右边,给z +1若不等于0表达式不等于0;否则整个表达式为0;3...

c语言 ++x||++y&&++z
才需要继续执行后一项的值,你所写的程序执行过程如下:由于++x=1为真,则或运算的表达式为真,则其后的++y不执行,所以到此x=1,y=0;继续执行后面的与运算,由于前面的++x||++y表达式为真,不能够决定整个与运算表达式是否为1,则继续执行++z,所以有z=1,所以该表达式的值为1。。。

请问c语言t=++x||++y&&++z这句话是什么意思?
c ++x||++y&&++z ++x = 2 , ++y = 2 , ++z = 1 (++x||++y)&&++z,可以这样来分,前面因为++x=2 所以扩号的值是1 1&&++z = 1&&1=1 这些都是逻辑判断,不要去理会具体等于多少,只要看它等于0还是等于1就可以了 ...

C言语中 ++X&&++Y||++Z , X=Y=Z=-1 求X,Y,Z值是多少
X=0,Y=-1,Z=0 C语言编译器也是很聪明的,&&这个符号只要第一个为0,那么就不会计算右边的,像你说的那个++X=0;那么++Y就不会运行了,这里Y=-1,就是这么来的,相同的如果||有一个为1,那么右边的也不会计算,我们看这里的|| 的左边是0,那么要计算右边++Z,所以Z=0;...

c++编程中--x&&++y&&++z是什么意思
多个&&从左往右算,先算--x,结果(--x)的返回值是0.&&表达式中,一旦左边的表达式为0,右边的表达式就不用算了。所以++y不会算,且(--x&&++y)的值是0 而0 && ++z同样的,右边不用算,所以结果x,y,z就分别是 0,1,1了

相似回答
大家正在搜