C51程序设计中的运算符应用
扫描二维码
随时随地手机看文章
优先级排列:
1.优先级最高的:并不是真正意义上的运算符
()改变优先级的符号(括号)、GrouPINg operator
[] 数组下标操作符 Array aCCess
()函数调用操作符 function access
->结构成员选择操作符(我把它叫做“箭头”)member access from a pointer
. 点 member access from a object
2.单目运算符:优先级最高,结合性从右到左
!~(取反)logICal negation ,bitwise complement
++ --(自增自减)pre-increace ,pre-decrease
-(负号)+(正号) minus, plus
*(取指针)derefenrence &(取地址)
(type)(强制类型转换)sizeof(取占用内存大小)
3.算术运算符:
* / %(取模、求余)优先级高于 + -
multipication, division, modulus, addition, subtraction
4.按位运算符
<< >> 右移,左移 bitwise shift left/right
5.关系运算符
< <= > >= comparision less-than/ less-than-or-equal-to/ greater than/ greater-than-or-equal-to
优先级高于
== != comparision equal-to/ not-equal-to
6. 逻辑运算符:
按位逻辑运算符优先级高于其他逻辑运算符
每个逻辑运算符的优先级都不同:
& bitwise AND
^ bitwise exclusive OR
| bitwise inculsive(normal) OR
&& logical AND
| | logical OR
7. 三目运算符: 条件运算符Ternary conditional (if-then-else的简写)
?:结合性:从右向左
8. 赋值操作符 assignments及其复合运算符
= 结合性:从右向左
+= -= *= /= %= &= ^= |= <<= >>=
9. 优先级最低的:逗号运算符(顺序执行操作符 Sequential evaluation operator)
,
分割函数参数的逗号并非逗号运算符,声明里的变量列表之间的逗号也不是逗号运算符,只是起分割的作用。逗号运算符连接的是表达式。
需要注意的地方:
10. 使用括号能提高程序的易看性,降低程序的出错率。在不知道优先级的地方,尽量多使用括号。
11. 过多使用括号,是程序代码增加,简单和易用本就是一对矛盾。所以,尽可能多了解优先级知识。记忆规则是:
优先级最高的和优先级最低的要记牢;
单目运算符的优先级很高,仅次于部分符号。
算术运算符的优先级很高,但次于单目运算符;
移位运算符的优先级比算术运算符底,但是比关系运算符要高。
关系运算符中,==与!=优先级低于其他关系优先级;
所有的逻辑运算符的优先级都低于关系运算符。不同的逻辑运算符的优先级不同。
三目运算符的优先级很低,但是高于赋值运算符;
赋值操作符的优先级很低,仅高于逗号运算符。
12. 括号有时候带来的不一定是好事。比如g(x,y)与g((x,y)),函数参数的数量就是不同的。
13. 运算符的优先级与表达式的求值顺序
c语言只有四个运算符(&& || ?: ,)存在规定的求值顺序。
a && b 先对a求值,如果a为0(假),则继续对b求值;如果a为非0(真),则不对b求值;
a || b 先对a求值,如果a为0(假),则不对b求值;如果a为非0(真),则对b求值;
a ? b : c 先对a求值,根据a的值去求b或者c的值。也就是说b、c不同是被求值;
a,b 先对左侧操作数a求值,然后a的值被丢弃,最对右侧操作数b求值