'''
1. 算数运算符
2. 比较(关系)运算符
3. 赋值运算符
4. 逻辑运算符
5. 位运算符
6. 成员运算符
7. 身份运算符
8. 运算符优先级
'''

'''
算术运算符 设 a = 10, b = 21

+  【说明：a+b = 31】
-  【说明：a-b = -11】
*  【说明：a*b = 210】
/  【说明：b/a = 2.1】
%  【说明：b%a = 1】 取余
** 【说明：2**3 = 8】 幂
// 【说明：b//a = 2】取整除
'''

'''
比较运算符 结果只有两种: (True 、 False) 设 a = 10, b = 21

== 【说明：】
== 【说明：a == b】False
!= 【说明：a != b】True
> 【说明：a > b】 False
< 【说明：a < b】 True
>=【说明：a >=b 】False
<=【说明：a <=b 】True

'''

'''
赋值运算符

= 
+=
-=
*=
/=
%=
**=
//=

不做过多说明，注意无 a++ 或者 ++a 这类写法

'''

'''
逻辑运算符 设 a = 10, b = 21

and 【说明：a and b 】返回 21
or【说明：a or b 】返回 10
not 【说明：not(a and b) 】False

'''

'''
位运算符 设 a = 60 , b = 13

&
!
^
~
<<
>>

备注： 使用 bin函数可以把数转换成二进制

bin(0) # '0b0' 其中 0b表示 二进制的意思
bin(2) # '0b10'

2 << 2 把 2 左移2位 (底层把数值转成二进制)

bin(6) # '0b110'
bin(5) # '0b101'
6 & 5 # '0b100' 4
bin(4) # '0b100'
6 | 5 # '0b111' 7
bin(7) # '0b111'

在计算机中 乘除计算 比 加减快的原因 是底层通过移位计算的
1 << 1 # 2
1 << 10 # 1024
bin(1024) # '0b10000000000

'''

'''
成员运算符

in 表示在序列中

not in 表示不在序列中

举例：

a = [1,2,3]
10 in a # False
100 not in a # True

'''

'''
身份运算符： 判断2个标识符是否引自同一对象 设 a = 20 , b = 20

is  是

is not  不是

举例：

用id函数获取对象内存地址

a = 20
b = 20
a is b # True
a == b # True

x = y = z = 10
id(x) # 4540454528
id(y) # 4540454528
id(z) # 4540454528

m=[1,2,3]
n=m

n == m # True
m # [1,2,3]
n # [1,2,3]
id(m) # 4544174792
id(n) # 4544174792
k=m[:] # 复制一份 m
id(k) # 4544159368
m is k # False

'''

'''
运算符优先级 从高到底

指数 **
按位翻转 ~+ ~-
乘除、取模、取整 */%//
加减 +-
左移、右移 >> <<
位 'AND' &
位运算符 ^ | 
比较运算符 <= < > >=
等于运算符 <> == !=
赋值运算符 = %= /= //= *= -= += *=
身份运算符 is、 is not
成员运算符 in、 not in
逻辑运算符 not or and

注：可以用 () 来改变优先级

'''
4a97c9007e74a7faae8323b292099c116ca79c6d
<mask token>

'''
1. 算数运算符
2. 比较(关系)运算符
3. 赋值运算符
4. 逻辑运算符
5. 位运算符
6. 成员运算符
7. 身份运算符
8. 运算符优先级
'''

'''
算术运算符 设 a = 10, b = 21

+  【说明：a+b = 31】
-  【说明：a-b = -11】
*  【说明：a*b = 210】
/  【说明：b/a = 2.1】
%  【说明：b%a = 1】 取余
** 【说明：2**3 = 8】 幂
// 【说明：b//a = 2】取整除
'''

'''
比较运算符 结果只有两种: (True 、 False) 设 a = 10, b = 21

== 【说明：】
== 【说明：a == b】False
!= 【说明：a != b】True
> 【说明：a > b】 False
< 【说明：a < b】 True
>=【说明：a >=b 】False
<=【说明：a <=b 】True

'''

'''
赋值运算符

= 
+=
-=
*=
/=
%=
**=
//=

不做过多说明，注意无 a++ 或者 ++a 这类写法

'''

'''
逻辑运算符 设 a = 10, b = 21

and 【说明：a and b 】返回 21
or【说明：a or b 】返回 10
not 【说明：not(a and b) 】False

'''

'''
位运算符 设 a = 60 , b = 13

&
!
^
~
<<
>>

备注： 使用 bin函数可以把数转换成二进制

bin(0) # '0b0' 其中 0b表示 二进制的意思
bin(2) # '0b10'

2 << 2 把 2 左移2位 (底层把数值转成二进制)

bin(6) # '0b110'
bin(5) # '0b101'
6 & 5 # '0b100' 4
bin(4) # '0b100'
6 | 5 # '0b111' 7
bin(7) # '0b111'

在计算机中 乘除计算 比 加减快的原因 是底层通过移位计算的
1 << 1 # 2
1 << 10 # 1024
bin(1024) # '0b10000000000

'''

'''
成员运算符

in 表示在序列中

not in 表示不在序列中

举例：

a = [1,2,3]
10 in a # False
100 not in a # True

'''

'''
身份运算符： 判断2个标识符是否引自同一对象 设 a = 20 , b = 20

is  是

is not  不是

举例：

用id函数获取对象内存地址

a = 20
b = 20
a is b # True
a == b # True

x = y = z = 10
id(x) # 4540454528
id(y) # 4540454528
id(z) # 4540454528

m=[1,2,3]
n=m

n == m # True
m # [1,2,3]
n # [1,2,3]
id(m) # 4544174792
id(n) # 4544174792
k=m[:] # 复制一份 m
id(k) # 4544159368
m is k # False

'''

'''
运算符优先级 从高到底

指数 **
按位翻转 ~+ ~-
乘除、取模、取整 */%//
加减 +-
左移、右移 >> <<
位 'AND' &
位运算符 ^ | 
比较运算符 <= < > >=
等于运算符 <> == !=
赋值运算符 = %= /= //= *= -= += *=
身份运算符 is、 is not
成员运算符 in、 not in
逻辑运算符 not or and

注：可以用 () 来改变优先级

'''