运算符及其应用
C++运算符又称操作符,它是对数据进行运算的符号,参与运算的数据称为操作数或运算对象,由操作数和操作符连接而成的有效的式子称为表达式。
按照运算符要求操作数个数的多少,可把C++运算符分为单目(或一元)运算符、双目(或二元)运算符和三目(或三元)运算符三类。单目运算符一般位于操作数的前面,如对x取负为-x;双目运算符一般位于两个操作数之间,如两个数a和b相加表示为a+b;三目运算符只有一个,即为条件运算符,它含有两个字符,分别把三个操作数分开。
一个运算符可能是一个字符,也可能由两个或三个字符所组成,还有的是一些C++保留字。如赋值号(=)就是一个字符,不等于号(!=)就是两个字符,左移赋值号(<<=)就是三个字符,测类型长度运算符(sizeof)就是一个保留字。
每一种运算符都具有一定的优先级,用来决定它在表达式中的运算次序。一个表达式中通常包含有多个运算符,对它们进行运算的次序通常与每一个运算符从左到右出现的次序相一致,但若它的下一个(即右边一个)运算符的优先级较高,则下一个运算符应先被计算。如当计算表达式a+b*(c-d)/e时,则每个运算符的运算次序依次为:-,*,/,+。
对于同一优先级的运算符,当在同一个表达式的计算过程中相邻出现时,可能是按照从左到右的次序进行,也可能是按照从右到左的次序进行,这要看运算符的结合性。如加和减运算为同一优先级,它们的结合性是从左到右,当计算a+b-c+d时,先做最左边的加法,再做中间的减法,最后做右边的加法;又如各种赋值操作是属于同一优先级,但结合性是从右到左,当计算a=b=c时,先做右边的赋值,使c的值赋给b,再做左边的赋值,使b的值赋给a。
表1-3列出了在C++语言中定义的全部运算符,其中优先级数字从小到大对应的优先级别为从高到低。
表1-3 C++运算符
优先级 | 运算符 | 功 能 | 目 数 | 结合性 |
1
| :: | 作用域区分符 |
双目 |
从左向右 |
() | 改变运算优先级或 函数调用操作符 | |||
[] | 访问数组元素 | |||
. | 直接访问数据成员 | |||
-> | 间接访问数据成员 | |||
2
| ! | 逻辑非 |
单目
|
从右向左
|
~ | 按位取反 | |||
+,- | 取正,取负 | |||
* | 间接访问对象 | |||
& | 取对象地址 | |||
++,-- | 增1,减1 | |||
() | 强制类型转换 | |||
Sizeof | 测类型长度 | |||
New | 动态申请内存单元 | |||
Delete | 释放new申请的单元 | |||
3 | .* | 引用指向类成员的指针 | 双目 | 从左到右 |
->* | 引用指向类成员的指针 | |||
4 | *,/,% | 乘,除,取余 |
双目
|
从左向右
|
5 | +,- | 加,减 | ||
6 | <<,>> | 按位左移,按位右移 | ||
7 | <,<=, >,>= | 小于,小于等于, 大于,大于等于 | ||
8 | ==,!= | 等于,不等于 | ||
9 | & | 按位与 | ||
10 | ^ | 按位异或 | ||
11 | | | 按位或 | ||
12 | && | 逻辑与 | ||
13 | || | 逻辑或 | ||
14 | ?: | 条件运算符 | 三目 | 从右向左 |
15 | = | 赋值 |
双目
|
从右向左
|
+=,-= | 加赋值,减赋值 | |||
*=,/= | 乘赋值,除赋值 | |||
%=,&= | 取余赋值,按位与赋值 | |||
^= | 按位异或赋值 | |||
|= | 按位或赋值 | |||
<<= | 按位左移赋值 | |||
>>= | 按位右移赋值 | |||
16 | , | 逗号运算符 | 双目 | 从左向右 |
优先级 | 运算符 | 功 能 | 目 数 | 结合性 |
1
| :: | 作用域区分符 |
双目 |
从左向右 |
() | 改变运算优先级或 函数调用操作符 | |||
[] | 访问数组元素 | |||
. | 直接访问数据成员 | |||
-> | 间接访问数据成员 | |||
2
| ! | 逻辑非 |
单目
|
从右向左
|
~ | 按位取反 | |||
+,- | 取正,取负 | |||
* | 间接访问对象 | |||
& | 取对象地址 | |||
++,-- | 增1,减1 | |||
() | 强制类型转换 | |||
Sizeof | 测类型长度 | |||
New | 动态申请内存单元 | |||
Delete | 释放new申请的单元 | |||
3 | .* | 引用指向类成员的指针 | 双目 | 从左到右 |
->* | 引用指向类成员的指针 | |||
4 | *,/,% | 乘,除,取余 |
双目
|
从左向右
|
5 | +,- | 加,减 | ||
6 | <<,>> | 按位左移,按位右移 | ||
7 | <,<=, >,>= | 小于,小于等于, 大于,大于等于 | ||
8 | ==,!= | 等于,不等于 | ||
9 | & | 按位与 | ||
10 | ^ | 按位异或 | ||
11 | | | 按位或 | ||
12 | && | 逻辑与 | ||
13 | || | 逻辑或 | ||
14 | ?: | 条件运算符 | 三目 | 从右向左 |
15 | = | 赋值 |
双目
|
从右向左
|
+=,-= | 加赋值,减赋值 | |||
*=,/= | 乘赋值,除赋值 | |||
%=,&= | 取余赋值,按位与赋值 | |||
^= | 按位异或赋值 | |||
|= | 按位或赋值 | |||
<<= | 按位左移赋值 | |||
>>= | 按位右移赋值 | |||
16 | , | 逗号运算符 | 双目 | 从左向右 |