int k=15,t;
t=kk==5 k;
开车后得到的k为什么是15而不是16?
=====
要理解这个问题,可以分为三个步骤:
1 .重点记住
=的优先顺序低于==,结合性为右
结合性
的优先顺序低于==,其结合性为左结合性
==的优先顺序更低,其结合性为左结合性
的优先顺序这一公式中最高,其结合性为右结合性
2 .总是觉得
逻辑运算符和||会发生短路现象:
* *
的左边为假时短路,此时右边的公式不再执行。 (请注意,这是右边的另一个表达式,而不是右边所有语句结束之前的表达式! )
|||*:||的左边为真时短路,不再执行||右边的公式
3 .详细推导
表达式t=kk==5 k根据运算符的优先级和组合性确定,表达式如下:
t=(k ) k==5) ) )。
(k ) )
的结合性,在表示中一定要先验证最初的两边是: k
(k==5) )。
k为15,左边为真,没有短路,继续看右边,表现k==5明显为假,值为0,所以公式k
(k==5)为假,值为0。 在这种情况下,表达被简化如下。
t=(0) k ) )
在这种情况下,表达式中的是原始表达式中的第二个,让我们看看表达式中的0
(k )明显左边为0,发生短路时不再执行) k ),因此k保持原来的值不变为16。 此时,原始的公式进一步简化如下。
t=0
最后,t的值是0,k的值不是15
这样解释,明白吗?
=========
计算机不是人。 不像人类那样,直接找到优先顺序最高的*号码进行运算
了解程序的编译过程非常重要
附录: c语言运算符和优先级
运算符的语义运算符类型结合方向
15 )圆括号用单眼从左到右
[]下标运算符-结构成员运算符,指向结构成员运算符14! 非逻辑运算符