运算
参考资料
运算符优先级表
第一级别
运算符 | 描述 | 示例 | 可重载性 |
---|---|---|---|
:: | 作用域解析符 | Class::age = 2; | 否 |
第二级别
运算符 | 描述 | 示例 | 可重载性 |
---|---|---|---|
++ | 后自增运算符 | for (int i = 0; i < 10; i++) cout << i; | 是 |
-- | 后自减运算符 | for (int i = 10; i > 0; i--) cout << i; | 是 |
type() type{} | 强制类型转换 | unsigned int a = unsigned(3.14); | 是 |
() | 函数调用 | isdigit('1') | 是 |
[] | 数组数据获取 | array[4] = 2; | 是 |
. | 对象型成员调用 | obj.age = 34; | 否 |
-> | 指针型成员调用 | ptr->age = 34; | 是 |
第三级别
运算符 | 描述 | 示例 | 可重载性 |
---|---|---|---|
++ | 前自增运算符 | for (i = 0; i < 10; ++i) cout << i; | 是 |
-- | 前自减运算符 | for (i = 10; i > 0; --i) cout << i; | 是 |
+ | 正号 | int i = +1; | 是 |
- | 负号 | int i = -1; | 是 |
! | 逻辑取反 | if (!done) … | 是 |
~ | 按位取反 | flags = ~flags; | 是 |
(type) | C 风格强制类型转换 | int i = (int) floatNum; | 是 |
* | 指针取值 | int data = *intPtr; | 是 |
& | 值取指针 | int *intPtr = &data; | 是 |
sizeof | 返回类型内存 | int size = sizeof floatNum; int size = sizeof(float); | 否 |
new | 动态元素内存分配 | long *pVar = new long; MyClass *ptr = new MyClass(args); | 是 |
new [] | 动态数组内存分配 | long *array = new long[n]; | 是 |
delete | 动态析构元素内存 | delete pVar; | 是 |
delete [] | 动态析构数组内存 | delete [] array; | 是 |
第四级别
运算符 | 描述 | 示例 | 可重载性 |
---|---|---|---|
.* | 类对象成员引用 | obj.*var = 24; | 否 |
->* | 类指针成员引用 | ptr->*var = 24; | 是 |
第五级别
运算符 | 描述 | 示例 | 可重载性 |
---|---|---|---|
* | 乘法 | int i = 2 * 4; | 是 |
/ | 除法 | float f = 10.0 / 3.0; | 是 |
% | 取余数(模运算) | int rem = 4 % 3; | 是 |
第六级别
运算符 | 描述 | 示例 | 可重载性 |
---|---|---|---|
+ | 加法 | int i = 2 + 3; | 是 |
- | 减法 | int i = 5 - 1; | 是 |
第七级别
运算符 | 描述 | 示例 | 可重载性 |
---|---|---|---|
<< | 位左移 | int flags = 33 << 1; | 是 |
>> | 位右移 | int flags = 33 >> 1; | 是 |
第八级别
运算符 | 描述 | 示例 | 可重载性 |
---|---|---|---|
<=> | 三路比较运算符 | if ((i <=> 42) < 0) ... | 是 |
第九级别
运算符 | 描述 | 示例 | 可重载性 |
---|---|---|---|
< | 小于 | if (i < 42) ... | 是 |
<= | 小于等于 | if (i <= 42) ... | 是 |
> | 大于 | if (i > 42) ... | 是 |
>= | 大于等于 | if (i >= 42) ... | 是 |
第十级别
运算符 | 描述 | 示例 | 可重载性 |
---|---|---|---|
== | 等于 | if (i == 42) ... | 是 |
!= | 不等于 | if (i != 42) ... | 是 |
第十一级别
运算符 | 描述 | 示例 | 可重载性 |
---|---|---|---|
& | 位与运算 | flags = flags & 42; | 是 |
第十二级别
运算符 | 描述 | 示例 | 可重载性 |
---|---|---|---|
^ | 位异或运算 | flags = flags ^ 42; | 是 |
第十三级别
运算符 | 描述 | 示例 | 可重载性 |
---|---|---|---|
| | 位或运算 | flags = flags | 42; | 是 |
第十四级别
运算符 | 描述 | 示例 | 可重载性 |
---|---|---|---|
&& | 逻辑与运算 | if (conditionA && conditionB) ... | 是 |
第十五级别
运算符 | 描述 | 示例 | 可重载性 |
---|---|---|---|
|| | 逻辑或运算 | if (conditionA || conditionB) ... | 是 |
第十六级别
运算符 | 描述 | 示例 | 可重载性 |
---|---|---|---|
? : | 条件运算符 | int i = a > b ? a : b; | 否 |
throw | 异常抛出 | throw EClass("Message"); | 否 |
= | 赋值 | int a = b; | 是 |
+= | 加赋值运算 | a += 3; | 是 |
-= | 减赋值运算 | b -= 4; | 是 |
*= | 乘赋值运算 | a *= 5; | 是 |
/= | 除赋值运算 | a /= 2; | 是 |
%= | 模赋值运算 | a %= 3; | 是 |
<<= | 位左移赋值运算 | flags <<= 2; | 是 |
>>= | 位右移赋值运算 | flags >>= 2; | 是 |
&= | 位与赋值运算 | flags &= new_flags; | 是 |
^= | 位异或赋值运算 | flags ^= new_flags; | 是 |
|= | 位或赋值运算 | flags |= new_flags; | 是 |
第十七级别
运算符 | 描述 | 示例 | 可重载性 |
---|---|---|---|
, | 逗号分隔符 | for (i = 0, j = 0; i < 10; i++, j++) ... | 是 |
tip
表中并未列出 const_cast
、static_cast
、dynamic_cast
、reinterpret_cast
、typeid
、sizeof...
、noexcept
及 alignof
等运算符,因为它们的使用形式与函数调用相同,不会出现歧义。
常见写法
计算平均值
int mid=l+r>>1;
判断奇偶性
if(x&1)
拆分二进制
i>>j&1