运算符与优先级

运算符

运算符 用于标识符之间,它们共同构成一组表达式。
除了小学数学里的加减乘除,还多了一些计算机语言特有的操作符。

C++

Common operators
a = b ++a +a a == b a[...]
a += b --a -a a != b *a
a -= b a++ a + b a < b &a
a *= b a-- a - b a > b a->b
a /= b !a a * b a <= b a.b
a %= b a&&b a / b a >= b a->*b
a &= b a||b a % b a <=> b a.*b
a |= b a(...) ~a
a ^= b a,b a & b
a <<= b a?b:c a | b
a >>= b a ^ b
a << b
a >> b
Special operators
static_cast const_cast new sizeof noexcept
dynamic_cast reinterpret_cast delete typeid alignof

Java

Operators
= == + += <<
> >= - -= >>
< <= * *= >>>
! != / /= <<=
~ && & &= >>=
? || | |= >>>=
: ++ ^ ^=
-> -- % %=
Separators
( [ { ; .
) ] } , ...
@ ::

Python

Operators
+ << < <= @
- >> > >=
* ** & ==
/ // | !=
% ~ ^ :=
Delimiters
( , = @ >>=
) : += @= <<=
[ ! -= %= **=
] . *= &=
{ ; /= |=
} -> //= ^=

以下为各种语言的运算符介绍:

C++ : cppreference.com
Java : docs.oracle.com
Python : docs.python.org

优先级

运算符 也是有优先级的,就好比 乘法、除法 与 加法、减法。

C++

优先级 运算符 描述 结合性
1 a::b 作用域解析 从左到右
2 a++
a--
后缀自增
后缀自减
从左到右
2 type(a)
type{a}
C++风格的
显式类型转换
从左到右
2 a() 函数调用 从左到右
2 a[] 下标访问 从左到右
2 a.b
a->b
成员访问 从左到右
3 ++a
--a
前缀自增
前缀自减
从右到左
3 +a
-a
正号
负号
从右到左
3 !a
~a
逻辑非
按位非
从右到左
3 (type)a C风格的
显式类型转换
从右到左
3 *a 取值 从右到左
3 &a 取址 从右到左
3 sizeof 取大小 从右到左
3 co_await 协程等待异步操作 从右到左
3 new - new[] 动态内存分配 从右到左
3 delete - delete[] 动态内存释放 从右到左
4 a.*b
a->*b
成员指针 从左到右
5 a*b
a/b
a%b
乘法
除法
取余
从左到右
6 a+b
a-b
加法
减法
从左到右
7 a<<b
a>>b
按位左移
按位右移
从左到右
8 a<=>b 三路比较运算符 从左到右
9 a<b
a<=b
a>b
a>=b
小于
小于等于
大于
大于等于
从左到右
10 a==b
a!=b
等于
不等于
从左到右
11 a&b 按位与 从左到右
12 a^b 按位异或 从左到右
13 a|b 按位或 从左到右
14 a&&b 逻辑与 从左到右
15 a||b 逻辑或 从左到右
16 a?b:c 条件表达式 从右到左
16 throw 异常抛出 从右到左
16 co_yield 协程生成值 从右到左
16 a = b 赋值 从右到左
16 a += b
a -= b
先做加法,再赋值
先做减法,再赋值
从右到左
16 a *= b
a /= b
a %= b
先做乘法,再赋值
先做除法,再赋值
先做取余,再赋值
从右到左
16 a <<= b
a >>= b
先做按位左移,再赋值
先做按位右移,再赋值
从右到左
16 a &= b
a ^= b
a |= b
先做按位与,再赋值
先做按位异或,再赋值
先做按位或,再赋值
从右到左
17 a,b 逗号表达式 从左到右

Java

优先级 运算符 描述 结合性
1 expr++
expr--
后缀自增
后缀自减
从左到右
2 ++expr
--expr
+expr
-expr
~
!
前缀自增
前缀自减
正号
负号
按位非
逻辑非
从左到右
3 *
/
%
乘法
除法
取余
从左到右
4 +
-
加法
减法
从左到右
5 <<
>>
>>>
按位左移
按位右移
按位无符号右移
从左到右
6 <
>
<=
>=
小于
大于
小于等于
大于等于
从左到右
7 a==b
a!=b
等于
不等于
从左到右
8 a&b 按位与 从左到右
9 a^b 按位异或 从左到右
10 a|b 按位或 从左到右
11 a&&b 逻辑与 从左到右
12 a||b 逻辑或 从左到右
13 a?b:c 条件表达式 从左到右
14 =
+=
-=
*=
/=
%=
&=
^=
|=
<<=
>>=
>>>=
赋值
先做加法,再赋值
先做减法,再赋值
先做乘法,再赋值
先做除法,再赋值
先做取余,再赋值
先做按位与,再赋值
先做按位异或,再赋值
先做按位或,再赋值
先做按位左移,再赋值
先做按位右移,再赋值
先做按位无符号右移,再赋值
从右到左

Python

优先级 运算符 描述 结合性
1 (expressions...)
[expressions...]
{key: value...}
{expressions...}
元组表达式
列表表达式
字典表达式
集合表达式
从左到右
2 x[index]
x[index:index]
x(arguments...)
x.attribute
下标访问
切片
函数调用
属性引用
从左到右
3 await x 等待异步操作 从左到右
4 ** 幂运算 从右到左
5 +x
-x
~x
正号
负号
按位非
从左到右
6 *
@
/
//
%
乘法
矩阵乘法
浮点除法
整型除法
取余
从左到右
7 +
-
加法
减法
从左到右
8 <<
>>
按位左移
按位右移
从左到右
9 & 按位与 从左到右
10 ^ 按位异或 从左到右
11 | 按位或 从左到右
12 in
not in
is
is not
<
<=
>
>=
!=
==

不在

不是
小于
小于等于
大于
大于等于
不等于
等于
从左到右
13 not x 逻辑非 从左到右
14 and 逻辑与 从左到右
15 or 逻辑或 从左到右
16 if – else 条件表达式 从右到左
17 lambda lambda表达式 从左到右
18 := 海象操作符 从左到右

以下为各种语言的运算符优先级介绍:

C++ : cppreference.com
Java : docs.oracle.com
Python : docs.python.org