本节必须掌握的知识点:
运算符
表达式
优先级
4.1.1 运算符
说到运算符与表达式,估计大家不会感到陌生,因为我们平常生活中经常接触到,比如我们买2元钱的馒头,付给老板5元钱,需找零钱3元钱。这中间的计算过程就用到了“5-2=3”算术表达式,“-”和“=”号运算符。数学中经常见到的运算符有“+、-、×、÷、=……”,而表达式则由操作数和运算符构成的。在C语言中也有运算符和表达式,大体与数学中的运算符和表达式相似。本节只是运算符与表达式的理论部分,实战部分将在第五章控制语句介绍。
常用运算符有:赋值运算符、算术运算符、关系运算符、逻辑运算符。
优先级 | 运算符 | 形式 | 名称 | 结合性 |
1 | () | x(y) | 函数调用运算符 | 左 |
[] | x[y] | 下标运算符 | 左 | |
. | x.y | .点运算符 | 左 | |
-> | x->y | ->箭头运算符 | 左 | |
++ | x++ | 后置递增运算符 | 左 | |
-- | x-- | 后置递减运算符 | 左 | |
2 | ++ | ++x | 前置递增运算符 | 右 |
-- | --x | 前置递减运算符 | 右 | |
sizeof | sizeof x | sizeof运算符 | 右 | |
& | &x | 取地址符(单目) | 右 | |
* | *x | 解运算符(单目) | 右 | |
+ | +x | 加运算符(单目) | 右 | |
- | -x | 减运算符(单目) | 右 | |
~ | ~x | 求补运算符 | 右 | |
! | !x | 逻辑非 | 右 | |
3 | () | (x)y | 类型转换运算符 | 右 |
4 | * | x*y | 乘法运算符(双目) | 左 |
/ | x/y | 除法运算符(双目) | 左 | |
% | x%y | 取模运算符 | 左 | |
5 | + | x+y | 加运算符(双目) | 左 |
- | x-y | 减运算符(双目) | 左 | |
6 | >> | x >> y | 左移运算符 | 左 |
<< | x << y | 右移运算符 | 左 | |
7 | < | x < y | 小于运算符 | 左 |
<= | x <= y | 小于等于运算符 | 左 | |
> | x > y | 大于运算符 | 左 | |
>= | x >= y | 大于等于运算符 | 左 | |
8 | == | x == y | 等于运算符 | 左 |
!= | x != y | 不等于运算符 | 左 | |
9 | & | x & y | 与运算符 | 左 |
10 | ^ | x ^ y | 异或运算符 | 左 |
11 | | | x | y | 或运算符 | 左 |
12 | && | x && y | 逻辑与运算符 | 左 |
13 | || | x || y | 逻辑或运算符 | 左 |
14 | ?: | x ?: y | 条件运算符 | 右 |
15 | = | x = y | 赋值运算符 | 右 |
+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|= | 复合运算符 | 右 | ||
16 | , | x,y | 逗号运算符 | 左 |
表4-1 运算符一览表
【注】无需记住这些优先级,我们可以使用圆括号()避免优先级错误的发生。
4.1.2 表达式
表达式是由一系列运算符(operators)和操作数(operands)组成的。
表达式:
在C语言中,常量、变量、函数调用以及按C语言语法规则用运算符把操作数连接起来的式子都是合法的表达式 。
举例
算术表达式 = 算术运算符 + 运算对象
赋值表达式 = 赋值运算符 + 运算对象
复合赋值表达式 = 复合赋值运算符 + 运算对象
自增、自减表达式 = 自增、自减运算符 + 运算对象
逗号表达式 = 逗号运算符 + 运算对象
关系表达式 = 关系运算符 + 运算对象
逻辑表达式 = 逻辑运算符 + 运算对象
条件表达式 = 条件运算符 + 运算对象
4.1.3 优先级
当一个表达式出现多个运算符时,需要考虑优先级的问题。例如:
int i = 1 + 2 * 3 / 4-5;
在运算时,我们应当考虑它们的优先级。当我们不确定时可以使用小括号“( )”帮助我们解决困惑。
举例
int i = 1 + ((2 * 3) / 4)-5;//这个例子可以很快知道先算哪一个再算哪一个。
我们接着看下面这2个例子:
!a && !b || c + d > 10 && d < 5 这是逻辑表达式的综合形式。
a + b & b + c >10 ? 1:0 这是条件表达式、位运算综合形式。
当我们遇到综合表达式时,会比较乱,这时借助小括号“()”会感受到括号的魅力。
((!a) && (!b ))|| ((c + d > 10) && (d < 5))
a + (b & b) + (c >10 ? 1:0)
优先级:
总结
本节介绍了运算符与表达式的知识点,或许读者看起来比较生硬,但我仍希望读者朋友能够耐心看下去,因为在实际项目开发中,运算符与表达式将贯穿整个项目。以后的章节开始,将会用到我们接触的C语言及汇编的所有知识点。
本文摘自编程达人系列教材《汇编的角度——C语言》。