一、C++运算符种类:
1.算术运算符。
2.关系运算符。
3.逻辑运算符。
4.位运算符。
5.赋值运算符。
6.杂项运算符。
二、运算优先级
一般地:赋值运算符 < 逻辑运算符 < | < ^ < & < 关系运算符 < <<,>> < 算术运算符<!,~ < 括号
具体为:
优先级 | 操作符 | 描述 | 例子 | 结合性 | |
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 | ! | 逻辑运算符 | 逻辑取反操作符 | 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; | |||
(type) | 类型转换操作符 | int i=(int)floatNum; | |||
sizeof | 返回对象占用的字节数操作符 | 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++)... | 从左到右 |
三、典型例子:
例1.计算23+2||2&&5*3-6^5
例2.计算0&&!2+5||1&&!(2+!0)
例3.int b=7; float a=2.5,c=4.7;
计算a+(int)(b/3*(int)(a+c)/2.0%4
例4.int a=3,b=2,c=1;
计算(a>b)==c
计算b+c<a
计算f=a>b>c
答案:例1. 1; 例2. 0; 例3. 5.5 例4. 1; 0; f的值为0