int x=y=z=1,t,执行t=++x||++y&&++z后,x、y、z、t的值~~~

正确答案是2、1、1、1
想不明白~~~
我有两种思路
如下:
1)因为前置++的优先级高于&&,&&又高于||,
所以原式可化简为
t=2||2&&2=2&&1=1;即x=y=z=2,t=1
2)看了很多题目,发现一般都不是用自加后的数字来运算,但是因为&&优先级高于||
所以原式化为。。。。。。。这个地方又我不知道了,按理说应该先计算++y||++z,可电脑计算不是从左至右的么,那到底要不要先把++x算出来呢?

能帮忙解释一下,我的两种思路有什么问题啊?

我给你说下c++和c语言处理这行代码的过程。

首先是从左往右的。
t=++x||++y&&++z

第一步:
t= (++x) || (++y&&++z);
因为||这个符号的优先级最低。

第二步:
++x; 执行完之后x=2;
(对于||这个符号有个特点就是如果左边是非零,那么直接就返回值了,不用执行右边了。因为没有意义,1或0还是1.)

第三部:
||左边是非零,直接结束,t=1;

所以t=1,x=2;y和z没变。
温馨提示:内容为网友见解,仅供参考
第1个回答  2019-11-17
我给你说下c++和c语言处理这行代码的过程。
首先是从左往右的。
t=++x||++y&&++z
第一步:
t= (++x) || (++y&&++z);
因为||这个符号的优先级最低。
第二步:
++x; 执行完之后x=2;
(对于||这个符号有个特点就是如果左边是非零,那么直接就返回值了,不用执行右边了。因为没有意义,1或0还是1.)
第三部:
||左边是非零,直接结束,t=1;
所以t=1,x=2;y和z没变。
第2个回答  2011-08-04
因为开始++X X自增了1 X为2;
而++X 和++Y&&++Z 中间是|| 表示OR 而++X不为0所以++X||++Y&&++Z一定为真 所以只运行了++X 而未运行++Y&&++Z 所以Y和Z未自增1 所以 Y = X = 1
T=++X||++Y&&++Z 因为 上面说到了(++X||++Y&&++Z)为真 即为1 所以把1赋给了 T
也就是T=1
第3个回答  2011-08-04
先计算++x,x=2,为真,真||任意值均为真,所以后面的都不再运算,直接输出
即:x=2,y=1,z=1,t=1。
第4个回答  2011-08-04
短路求值,当||符左边为真,右边的便不再计算。所以++x=2为真t=1,y,z不再计算为1.

x=y=z=1 t=++x||++y&&++z 求t,x,y,z的值
首先是从左往右的。t=++x||++y&&++z 第一步:t= (++x) || (++y&&++z);因为||这个符号的优先级最低。第二步:++x; 执行完之后x=2;(对于||这个符号有个特点就是如果左边是非零,那么直接就返回值了,不用执行右边了。因为没有意义,1或0还是1.)第三部:||左边是非零,...

...x=y=z=1;t=++x||++y&&++z;则执行这个语句后t的值为
x=y=z=1表示给x,y,z赋值,这时x,y,z的值都是1了;t=++x||++y&&++z表示将++x||++y&&++z的运算结果赋值给t;具体就是:先进行++y&&++z运算,因为&&(与运算)的优先级逼||运算的优先级高,++y后y等于2,++z后z等于2所以++y&&++z后结果为1;(逻辑运算你应该知道吧?为真就是1,...

...执行以下语句后,t的值为? x=y=z=1; t=++x || ++y&&++z;
x=2;y和Z的值不变;逻辑运算++x的值为1,因此后面的语句没有执行;参考:短路求值 作为"&&"和"||"操作符的操作数表达式,这些表达式在进行求值时,只要最终的结果已经可以确定是真或假,求值过程便告终止,这称之为短路求值。这是这两个操作符的一个重要属性。假如expr1和expr2都是表达式,并且e...

...main() { int x,y,z,t; x=y=z=1; t=++x||++y&&++z; p
t=--x||--y&&--z;当判断++x时,x值为0,即假,所以||后面的表达式需继续判断。--y的值为0因为后面是&&,所以后半部分的值为0。所以,整个表达式的值为0(t=0)输出的是x=0y=0z=1t=0

...main() { int x,y,z,t; x=y=z=1; t=++x||++y&&++z; printf("x=%d...
include <stdio.h>int main(){int x,y,z,t;x=y=z=1;t=++x||++y&&++z;printf("x=%d y=%d z=%d t=%d\\n",x,y,z,t);return 0;}运行结果:x=2 y=1 z=1 t=1 你说t是怎么算的?你呢应该是迷糊t=++x||++y&&++z;这个表达式是吧 好 你要搞清楚这个问题你就得知道运算符...

整型变量x=y=z=1,执行逻辑表达式++x&&y--||++z后,x,y,z的值分别为...
2,1,1 首先&&的优先级高于||,所以表达式可写为 w=++x||(++y&&++z);与&&和||连接的表达式按从左到右的顺序进行求值,在知道结果为真或者假后立即停止计算 ||和&&都是序列点,所以先算++x的值=2,整个表达式的结果为真,后面的就不用算了。最后结果就是 x=2,y=1,z=1 ...

...以下语句后,t的值为( ) x=y=z=1; t=++x||++y&&++z;求过程。_百度知 ...
x=y=z=1; \/\/首先执行这一句:把1赋值给z,再把z的值给y,再把y的值给x x,y,z的值都等1 t=++x||++y&&++z; \/\/在这一条语句中,赋值号=的运算级别最低,因此先算++x||++y&&++z \/\/先算++X后x=2 表达为 x||++y&&++z \/\/++y 后 y=2 表达为 x||y&&++z \/\/++z ...

x=y=z=1;t=++x||++y&&++z;求答案!!
t=2||2&&2=1

设x,y,z,t均为int型变量,则执行以下语句后,t的值为(D?)。 x=y=z=1...
t值为1。++x||--y 且x=y=z=1,对于或运算,只要第一项正确,后面的就不用去考虑。++x运算后x变为2为真就不管--y的运行结果,这项表达式为1。后面一项,&&++z,因为++运算优先等级大于&& 所以先计算++z,z计算后变为2,执行&&"且"运算。最后得出结果为1。或:if(x=y)t =z else t=...

整型变量x=y=z=1,执行逻辑表达式++x&&y--||++z后,x,y,z的值分别为...
执行逻辑表达式++x&&y--||++z后,x,y,z的值分别为2、0、1

相似回答