前面不管 x 、y 、z 、t 这几个值是什么了从 x = y = z = 1;这里讲起吧!
x = y = z = 1;
上面这一条语句的执行顺序是先是 z = 1 再是 y = z 最后 x = y 这当然使 x 、y 、z 这三个值都为 1 值。
t = x++ && y++ || z++;
接下来然后是这个,x++、y++和z++都是后增(即:先被调用参加各种运算,最后自增),&&运算符优先级高于||运算符。
还有一个知识点是在先进逻辑运算时有一个“短路现象”如果不清楚,我先讲讲:
<表达式1> && <表达式2> 就说这个吧,对于逻辑与“&&”运算当<表达式1>为假时(即:0),那么<表达式2>将不会执行。
原因很好说,你应该知道逻辑“与”运算的规则吧,就说两个值吧,两个值必需都为真(即:1) 结果才会为真(即:1),否则为假(即:0) 。
如果说 <表达式1> 为假(即:0)时,其实整个表达式的值就被定下来了,不管 <表达式2> 是“1”还是“0”整个表达式的结果都是“0”,
这样的话,那么 <表达式2> 就根本不用执行了。
所以结论就出来的:
对于“<表达式1> && <表达式2>”这样一个表达式,其中 <表达式1> 为“0”时,<表达式2> 就不会被执行了。
对于逻辑“或”(即:||) 运算也有这样的现象,道理一样啦^-^:
对于“<表达式1> || <表达式2>”这样一个表达式,其中 <表达式1> 为“1”时,<表达式2> 就不会被执行了。
好了现在来说说 t = x++ && y++ || z++; 这个吧:
先是 x++ && y++ 这个,判断 x 为真(非0的值被认为是“真”,x为1,所以是“真”),再去判断 y 也是“真”,
所以“x++ && y++ ”这个表达式的值为“真”,前面不是说了“或”逻辑运算也有“生路现象”,“z++”不会执行;
现在“x++ && y++ || z++”表达式的逻辑值不是就出来了吗,为“真”(即:1),所以t被赋值“1”;
运算都结束了,现在 x 和 y 都执行自加了,都为“2”,由于“短路现象”因而 z 就没有执行自加,所以还是“1”。
最后结果就是“答:x = 2, y = 2, z = 1, t = 1”这个了!
说了这么多,不知道解释清楚没有!
--------------------next---------------------
阅读(1269) | 评论(0) | 转发(0) |