C 运算符执行顺序对照表:在线查看C 运算符执行优先级别 窍门: Ctrl F 快速查找
C 运算符优先级,是描述在计算机计算表达式时执行运算的先后顺序。C 运算符优先级表,从上到下,从左到右,优先级依次减弱
优先级 | 运算符 | 描述 | 结合性 |
---|---|---|---|
1 | :: | 范围解析 | 自左向右 |
2 | -- | 后缀自增/后缀自减 | |
() | 括号 | ||
[] | 数组下标 | ||
. | 成员选择(对象) | ||
−> | 成员选择(指针) | ||
3 | -- | 前缀自增/前缀自减 | 自右向左 |
− | 加/减 | ||
! ~ | 逻辑非/按位取反 | ||
(type) | 强制类型转换 | ||
* | 取指针指向的值 | ||
& | 某某的地址 | ||
sizeof | 某某的大小 | ||
new,new[] | 动态内存分配/动态数组内存分配 | ||
delete,delete[] | 动态内存释放/动态数组内存释放 | ||
4 | .* ->* | 成员对象选择/成员指针选择 | 自左向右 |
5 | * / % | 乘法/除法/取余 | |
6 | − | 加号/减号 | |
7 | << >> | 位左移/位右移 | |
8 | < <= | 小于/小于等于 | |
> >= | 大于/大于等于 | ||
9 | == != | 等于/不等于 | |
10 | & | 按位与 | |
11 | ^ | 按位异或 | |
12 | | | 按位或 | |
13 | && | 与运算 | |
14 | || | 或运算 | |
15 | ?: | 三目运算符 | 自右向左 |
16 | = | 赋值 | |
= −= | 相加后赋值/相减后赋值 | ||
*= /= %= | 相乘后赋值/相除后赋值/取余后赋值 | ||
<<= >>= | 位左移赋值/位右移赋值 | ||
&= ^= |= | 位与运算后赋值/位异或运算后赋值/位或运算后赋值 | ||
17 | throw | 抛出异常 | |
18 | , | 逗号 | 自左向右 |
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 )... | 从左到右 |