c语言判断算符优先级,C语言算符优先级(精华)

int k=15,t;

t=k&&k==5&&++k;

运行后得到的 k为什么是 15不是16 ??

====

要理解这个问题分三步:

1.重点记住

=的优先级比&&,==,++都要低,且它的结合性为 右

结合性

&&的优先级低于==,++,且它的结合性为 左 结合性

==的优先级低于++,且它的结合性为 左 结合性

++的优先级这这个表达式中最高,且它的结合性为 右 结合性

2.时刻想到

逻辑运算符&&和||会出现短路现象:

* && *

:当&&的左边为假时短路,此时不再执行&&右边的表达式(注意是&&右边的另一个表达式,而不是右边所有到到语句结束的表达式!!)

* || * :当||的左边为真时短路,些时不再执行||右边的表达式

3.详细推导

在表达式t=k&&k==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 ! 逻辑非运算符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值