C++运算符优先级
2014-12-11 21:26
246 查看
4000
看到一个不错的表格,MARK一下.
PS:某些恶心的面试题最喜欢搞这些了。
看到一个不错的表格,MARK一下.
PS:某些恶心的面试题最喜欢搞这些了。
优先级 | 操作符 | 描述 | 例子 | 结合性 |
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++ ) ... | 从左到右 |