运算符优先级
C++运算符优先级
有时在写判断条件时会忘记运算符的优先级,每次查完就忘了,索性在这里摘抄一下。
| 运算符说明 | 运算符 |
|---|---|
| 第1组优先级,无关联 | |
| 范围解析 | :: |
| 第2组优先级,从左往右关联 | |
| 成员选择(对象或指针) | .或-> |
| 数组下标 | [] |
| 函数调用 | () |
| 后缀递增 | ++ |
| 后缀递减 | -- |
| 类型名称 | typeid |
| 类型转换 | const_cast、dynamic_cast、reinterpret_cast、static_cast |
| 第3组优先级,从右往左关联 | |
| 对象或类型的大小 | sizeof |
| 前缀递增 | ++ |
| 前缀递减 | -- |
| 二进制反码 | ~ |
| 逻辑“非” | ! |
| 正负号 | +、- |
| 取地址 | & |
| 解地址符 | * |
| 创建对象 | new |
| 析构对象 | delete |
| 强制转换 | () |
| 第4组优先级,从左往右关联 | |
| 指向成员的指针(对象或指针) | .* 或->* |
| 第5组优先级,从左往右关联 | |
| 乘除和取模运算 | *、/ 、% |
| 第6组优先级,从左往右关联 | |
| 加减运算 | + 、- |
| 第7组优先级,从左往右关联 | |
| 移位运算 | >>或<< |
| 第8组优先级,从左往右关联 | |
| 大于、小于、大于等于、小于等于 | >, <, >=, <= |
| 第9组优先级,从左往右关联 | |
| 等于、不等于 | ==、!= |
| 第10组优先级,从左往右关联 | |
| 按位“与” | & |
| 第11组优先级,从左往右关联 | |
| 按位“异或” | ^ |
| 第12组优先级,从左往右关联 | |
| 按位“或” | | |
| 第13组优先级,从左往右关联 | |
| 逻辑与 | && |
| 第14组优先级,从左往右关联 | |
| 逻辑或 | || |
| 第15组优先级,从右到左关联 | |
| 条件 | ?: |
| 赋值 | = |
| 乘法赋值 | *= |
| 除法赋值 | /= |
| 取模赋值 | %= |
| 加法赋值 | += |
| 减法赋值 | -= |
| 左移赋值 | <<= |
| 右移赋值 | >>= |
| 按位“与”赋值 | &= |
| 按位“或”赋值 | |= |
| 按位“异或”赋值 | ^= |
| 抛出表达式 | throw |
| 第16组优先级,从左往右关联 | |
| 逗号分隔符 | , |
优先级由高到低,同一组的运算符具有相同的优先级。关联是指同一优先级的运算符的解析顺序。此外,()具有最高优先级,可以使用小括号来改变运算顺序。
示例
复合赋值运算和加减乘除
复合赋值运算都是比加减乘除优先级低的。
// 加赋值
int a = 10, b = a, c = b, d = c;
a += 2 + 3; // 15
b += 2 - 3; // 9
c += 2 * 3; // 16
d += 4 / 2; // 12
// 减赋值
a = 10, b = a, c = b, d = c;
a -= 2 + 3; // 5
b -= 2 - 3; // 11
c -= 2 * 3; // 4
d -= 4 / 2; // 8
// 乘赋值
a = 10, b = a, c = b, d = c;
a *= 2 + 3; // 50
b *= 2 - 3; // -10
c *= 2 * 3; // 60
d *= 4 / 2; // 20
// 除赋值
a = 10, b = a, c = b, d = c;
a /= 2 + 3; // 2
b /= 2 - 3; // -10
c /= 2 * 3; // 1
d /= 4 / 2; // 5
// 移位赋值
a = 256, b = a, c = b, d = c;
a >>= 2 + 3; // 8
b >>= 3 - 2; // 128
c >>= 2 * 3; // 4
d >>= 4 / 2; // 64
// 按位与赋值
a = 15, b = a, c = b, d = c; // 15 = 0b1111
a &= 2 + 3; // 5
b &= 2 - 3; // 15
c &= 2 * 3; // 6
d &= 4 / 2; // 2
逻辑运算和按位运算
按位运算比逻辑运算的优先级高。
按位运算之间也是有优先级的,&最高,^其次,|最低。
bool flag = false;
auto res = flag && 1 | 3; // res类型是bool 先计算按位运算,再进行逻辑运算
auto n = 2 | 1 & 4; // 2

浙公网安备 33010602011771号