数学运算符和优先级
运算符的概念
在数学里我们会用加、减、乘、除这些符号来进行计算,在编程里也有类似的符号,叫做运算符。运算符可以对数据进行各种操作,就像我们用工具来完成不同的事情一样。本文我们来学习C++里常用的单目、双目运算符。
单目运算符
单目运算符只需要一个操作数,就好像一个人就能完成的事情。
负号运算符(-)
这个运算符可以把一个数变成它的相反数。比如原来是正数,用了负号运算符就变成负数;原来是负数,就变成正数。
在这个例子中,num
的值是 5
,使用负号运算符后,result
的值就变成了 -5
。
自增运算符(++)
自增运算符可以让变量的值增加1。它有两种形式:前置自增(++变量名
)和后置自增(变量名++
)。前置自增是先把变量的值加1,再使用变量的值;后置自增是先使用变量的值,再把变量的值加1。
在这个例子中,前置自增后,a
的值变成了 6
,b
的值也是 6
;后置自增后,c
的值变成了 6
,但 d
的值是 5
。
自减运算符(--)
自减运算符可以让变量的值减少1。它也有前置自减(--变量名
)和后置自减(变量名--
)两种形式,用法和自增运算符类似。
在这个例子中,前置自减后,a
的值变成了 4
,b
的值也是 4
;后置自减后,c
的值变成了 4
,但 d
的值是 5
。
双目运算符
双目运算符需要两个操作数,就好像需要两个人一起完成的事情。
加法运算符(+)
加法运算符可以把两个数相加。
在这个例子中,a
的值是 3
,b
的值是 5
,使用加法运算符后,result
的值是 8
。
减法运算符(-)
减法运算符可以用一个数减去另一个数。
在这个例子中,a
的值是 8
,b
的值是 3
,使用减法运算符后,result
的值是 5
。
乘法运算符(*)
乘法运算符可以把两个数相乘。
在这个例子中,a
的值是 4
,b
的值是 6
,使用乘法运算符后,result
的值是 24
。
除法运算符(/)
除法运算符可以用一个数除以另一个数。要注意,如果两个操作数都是整数,结果会只保留整数部分。
在这个例子中,a
的值是 10
,b
的值是 3
,使用除法运算符后,result
的值是 3
,因为只保留了整数部分。
取模运算符(%)
取模运算符可以得到两个数相除的余数。
在这个例子中,a
的值是 10
,b
的值是 3
,使用取模运算符后,result
的值是 1
,因为 10
除以 3
的余数是 1
。
运算符的优先级
以下是C++中相关运算符的优先级表,按从高到低排列:
优先级 | 运算符 | 名称/描述 | 结合性 |
---|---|---|---|
1 | ++ (后置)、-- (后置) | 后置自增/自减 | 从左到右 |
2 | ++ (前置)、-- (前置)、+ (正号)、- (负号) | 前置自增/自减、单目运算符 | 从右到左 |
3 | * 、/ 、% | 乘法、除法、取模 | 从左到右 |
4 | + (加法)、- (减法) | 双目加法、减法 | 从左到右 |
详细说明:
-
后置自增/自减 (
a++
,a--
)
优先级最高,先返回当前值,再对操作数进行自增/自减。 -
前置自增/自减 (
++a
,--a
) 和单目运算符 (+a
,-a
)
先对操作数进行自增/自减或符号运算,再返回结果。 -
乘法、除法、取模 (
*
,/
,%
)
从左到右结合,先计算乘除/取模,再处理加减。 -
双目加法、减法 (
+
,-
)
最低优先级,从左到右结合。