学习c语言,运算符算是c语言的一个基础知识,运算符的两个特征就是重点的重点了,其一就 c 最重要的是运算符优先级,其二就是结合性,这两个特征也算是笔试的基础题目。
c语言的优先级有很多级,我觉得可以先把运算符分成两大类,一类是单目运算,一类是双目运算(其中包含一个三目运算)。
一、单目运算:顾名思义,就是运算只需要一个变量,如c++,*c等(c表示变量名)。
结论1. 单目运算的优先级比双目(包括三目)运算优先级高
在c的运算符中,所有单目运算的优先级都高于双目运算。
但是单目运算还分左单目(如++i)和右单目(如i++)。
双目运算 a+b,a>b,a&b ,a=b 等等类似的,即运算符两边都有操作数的。(注意:结构体运算符.和->除外)
结论2.单目运算符中:右边的单目运算高于左边的单目运算。
右单目有如下运算:函数(),数组[],结构体成员 .,结构体指针成员->(记得把结构体的运算符看成单目运算,这两个比较特殊),后++,后--
左单目有如下运算:逻辑!,按位反~,正值+,负值-,前++,前--,间接访问*,区地址&,sizeof,类型强制转换()。
比如*p++ ; 这个要先运行右++(但是右++并不立即生效),然后*号运算
比如++a[0] ; []运算先计算,取出数组的值,然后++,改变了数组0元素的内容。
比如--p->x; 结构体指针先运算,然后--
比如 & p.key 这是取结构体成员key的地址,.运算先运算
比如 p.key++ 先取出key的值,然后++。注意优先级
结论3.优先级最高的是改变优先级的().(如 定义指针数组 char(*arr)[])
小括号有3种格式,函数(),类型强制转换(),改变优先级()。
改变优先级的最高,函数其次,类型转换最后。
单目运算就包括以上三种结论,以下讨论双目运算
二、双目运算的优先级也不难。
结论4. 算术运算最高,逗号最低,赋值倒数第二
算术包括+,-,* ,/,% 这几个运算符的优先级跟你小学的知识一样,先乘除后加减
结论5.四字短语:算移比位
算表示算术运算,上面提到的结论4.
移表示移位运算(c语言只有左移和右移),注意:c语言右移其实包括逻辑右移(有符号数)和算术右移(无符号数)。
位表示位运算(位与,位或,位异或)
比较运算(大于,小于,等于,不等于)
结论6.四字短语:逻条等逗
逻辑运算(逻辑与和逻辑或),注意:逻辑 ! 是单目运算符,优先级比较高,不包括在这。
条件运算符:即三目运算(唯一的三目运算)
等表示赋值运算(=,+=,*=等)
逗号运算(,)
4字短语可能不太好记,不押韵,也不是什么短语。多看几眼,有事没事记记可能就好了。
以上是我自己总结的运算优先级的规则,基本记住加理解还是很容易就记住的。至少我在工作学习中都是这么记忆的,希望能够帮助到大家。
7. 还要考虑运算符的结合性:
7.1 只有3类运算符是从右到左,其他都是从左到右。
a.单目运算的左单目运算符。
b.三目运算
c.赋值运算,有等号的都是的。
最近我也在准备自己的微信公众号
大智工作室友情提供帮助。也可以扫描以下二维码