PrecedenceOperatorDescriptionExampleAssociativity
1 | () [] -> . :: ++ -- | Grouping operator Array access Member access from a pointer Member access from an object Scoping operator Post-increment Post-decrement | (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-- ) ... | left to right |
2 | ! ~ ++ -- - + * & (type) sizeof | Logical negation Bitwise complement Pre-increment Pre-decrement Unary minus Unary plus Dereference Address of Cast to a given type Return size in bytes | if( !done ) ... flags = ~flags; for( i = 0; i < 10; ++i ) ... for( i = 10; i > 0; --i ) ... int i = -1; int i = +1; da address = &obj; int i = (int) floatNum; int size = sizeof(floatNum); | right to left |
3 | ->* .* | Member pointer selector Member pointer selector | ptr->*var = 24; obj.*var = 24; | left to right |
4 | * / % | Multiplication Division Modulus | int i = 2 * 4; float f = 10 / 3; int rem = 4 % 3; | left to right |
5 | + - | Addition Subtraction | int i = 2 + 3; int i = 5 - 1; | left to right |
6 | << >> | Bitwise shift left Bitwise shift right | int flags = 33 << 1; int flags = 33 >> 1; | left to right |
7 | < <= > >= | Comparison less-than Comparison less-than-or-equal-to Comparison greater-than Comparison geater-than-or-equal-to | if( i < 42 ) ... if( i <= 42 ) ... if( i > 42 ) ... if( i >= 42 ) ... | left to right |
8 | == != | Comparison equal-to Comparison not-equal-to | if( i == 42 ) ... if( i != 42 ) ... | left to right |
9 | & | Bitwise AND | flags = flags & 42; | left to right |
10 | ^ | Bitwise exclusive OR | flags = flags ^ 42; | left to right |
11 | | | Bitwise inclusive (normal) OR | flags = flags | 42; | left to right |
12 | && | Logical AND | if( conditionA && conditionB ) ... | left to right |
13 | || | Logical OR | if( conditionA || conditionB ) ... | left to right |
14 | ? : | Ternary conditional (if-then-else) | int i = (a > b) ? a : b; | right to left |
15 | = += -= *= /= %= &= ^= |= <<= >>= | Assignment operator Increment and assign Decrement and assign Multiply and assign Divide and assign Modulo and assign Bitwise AND and assign Bitwise exclusive OR and assign Bitwise inclusive (normal) OR and assign Bitwise shift left and assign Bitwise shift right and assign | 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; | right to left |
16 | , | Sequential evaluation operator | for( i = 0, j = 0; i < 10; i++, j++ ) ... | left to right |
给了运算符名称``但是后面没有写优先级和结合性的```运算符``他们的优先级和结合性``同上一只到写的有地方``
比如: 头3个运算符(强制,下标,成员)的优先级都是15,结合性都是自左向右````
而接下来的6个呢``优先级都是14,结合性都是自右想左```
我想看起来应该不回很难吧```
类别 | 运算符 | 名称 | 优先级 | 结合性 |
强制 | ( ) | 类型转换,参数表,函数调用 | 15 | 自左向右 |
下标 | [ ] | 数组元素的下标 | ||
成员 | - > . | 结构型或共用型成员 | ||
逻辑 | ! | 逻辑非 | 14 | 自右向左 |
位 | ~ | 位非 | ||
增1减1 | ++ -- | 增加1,减少1 | ||
指针 | & * | 取地址,取内容 | ||
算术 | + - | 取正,取负 | ||
长度 | sizeof | 数据长度 | ||
算术 | * / % + - | 乘,除(整除),模(取余) 加,减 | 13 12 | 自左向右 |
位 | << >> | 左移位,右移位 | 11 | |
关系 | >= > <= < == != | 大于等于,大于,小于等于,小于 相等,不相等 | 10 9 | |
位 | & ^ | | 位逻辑与 位逻辑按位加 位逻辑或 | 8 7 6 | |
逻辑 | && || | 逻辑与 逻辑或 | 5 4 | |
条件 | ? : | 条件 | 3 | 自右向左 |
赋值 | = | 赋值 | 2 | |
自反赋值 | += -= &= /= %= &= ^= |= <<= >>= | 加赋值,减赋值,乘赋值,除赋值,模赋值 位与赋值,位按位加赋值,位或赋值 位左移赋值,位右移赋值 | ||
逗号 | , | 逗号 | 1 | 自左向右 |