Skip to main content

运算

参考资料

运算符优先级表

第一级别

运算符描述示例可重载性
::作用域解析符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_caststatic_castdynamic_castreinterpret_casttypeidsizeof...noexceptalignof 等运算符,因为它们的使用形式与函数调用相同,不会出现歧义。

常见写法

计算平均值

int mid=l+r>>1;

判断奇偶性

if(x&1)

拆分二进制

i>>j&1