C++ 运算符笔记
C++ 运算符笔记
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 |
() [] -> . :: ++ -- |
调节优先级的括号操作符 数组下标访问操作符 通过指向对象的指针访问成员的操作符 通过对象本身访问成员的操作符 作用域操作符 后置自增操作符 后置自减操作符 |
(a + b) / 4; array[4] = 2; ptr->age = 34; obj.age = 34; Class::age = 2; for( i = 0; i < 10; i++ ) ... for( i = 10; i > 0; i-- ) ... |
从左到右 |
2 |
! ~ ++ -- - + * & (type) sizeof |
逻辑取反操作符 按位取反(按位取补) 前置自增操作符 前置自减操作符 一元取负操作符 一元取正操作符 解引用操作符 取地址操作符 类型转换操作符 返回对象占用的字节数操作符 |
if( !done ) ... flags = ~flags; for( i = 0; i < 10; ++i ) ... for( i = 10; i > 0; --i ) ... int i = -1; int i = +1; data = *ptr; address = &obj; int i = (int) floatNum; int size = sizeof(floatNum); |
从右到左 |
3 |
->* .* |
在指针上通过指向成员的指针访问成员的操作符 在对象上通过指向成员的指针访问成员的操作符 |
ptr->*var = 24; obj.*var = 24; |
从左到右 |
4 |
* / % |
乘法操作符 除法操作符 取余数操作符 |
int i = 2 * 4; float f = 10 / 3; int rem = 4 % 3; |
从左到右 |
5 |
+ - |
加法操作符 减法操作符 |
int i = 2 + 3; int i = 5 - 1; |
从左到右 |
6 |
<< >> |
按位左移操作符 按位右移操作符 |
int flags = 33 << 1; int flags = 33 >> 1; |
从左到右 |
7 |
< <= > >= |
小于比较操作符 小于或等于比较操作符 大于比较操作符 大于或等于比较操作符 |
if( i < 42 ) ... if( i <= 42 ) ... if( i > 42 ) ... if( i >= 42 ) ... |
从左到右 |
8 |
== != |
等于比较操作符 不等于比较操作符 |
if( i == 42 ) ... if( i != 42 ) ... |
从左到右 |
9 | & | 按位与操作符 | flags = flags & 42; | 从左到右 |
10 | ^ | 按位异或操作符 | flags = flags ^ 42; | 从左到右 |
11 | | | 按位或操作符 | flags = flags | 42; | 从左到右 |
12 | && | 逻辑与操作符 | if( conditionA && conditionB ) ... | 从左到右 |
13 | || | 逻辑或操作符 | if( conditionA || conditionB ) ... | 从左到右 |
14 | ? : | 三元条件操作符 | int i = (a > b) ? a : b; | 从右到左 |
15 |
= += -= *= /= %= &= ^= |= <<= >>= |
赋值操作符 复合赋值操作符(加法) 复合赋值操作符(减法) 复合赋值操作符(乘法) 复合赋值操作符(除法) 复合赋值操作符(取余) 复合赋值操作符(按位与) 复合赋值操作符(按位异或) 复合赋值操作符(按位或) 复合赋值操作符(按位左移) 复合赋值操作符(按位右移) |
int a = b; a += 3; b -= 4; a *= 5; a /= 2; a %= 3; flags &= new_flags; flags ^= new_flags; flags |= new_flags; flags <<= 2; flags >>= 2; |
从右到左 |
16 | , | 逗号操作符 | for( i = 0, j = 0; i < 10; i++, j++ ) ... | 从左到右 |
版权声明:本文为博主原创文章,未经博主允许不得转载。By PengCoX ( Pengc825@foxmail.com )