我给你说下c++和c语言处理这行代码的过程。
首先是从左往右的。
t=++x||++y&&++z
第一步:
t=
(++x)
||
(++y&&++z);
因为||这个符号的优先级最低。
第二步:
++x;
执行完之后x=2;
(对于||这个符号有个特点就是如果左边是非零,那么直接就返回值了,不用执行右边了。因为没有意义,1或0还是1.)
第三部:
||左边是非零,直接结束,t=1;
所以t=1,x=2;y和z没变。
因为开始++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
值得注意的是,逻辑运算符不按照规定的优先级计算。在逻辑表达式的求值过程中,如果从“&&”或“||”左边的运算对象部分已经能够确定整个逻辑表达式的值得时候,则不再求右边运算对象的值,这样做提高了运算速度。
以上说的这种运算的规则是c对逻辑运算的特殊处理规则。它严格地执行从左到右运算的规则,不受运算符优先级所影响。
++x||++y&&++z等价于(++x)||(++y)&&(++z),结合方向为左结合型,这样x加完后为2,这个已经确定了式子为1,t=1,右边的y,z就不用做处理了,所以结果是2
1
1
1