# ###(7)位运算符: & | ~ ^ << >> var1 = 19 var2 = 15 # & 按位与 res = var1 & var2 print(res) ''' 10011 01111 00011 ''' # | 按位或 res = var1 | var2 print(res) ''' 10011 01111 11111 ''' # << 左移 """ n<<m n乘以2的m次幂 """ res = 5 << 2 # 相当于5 * 2的2次幂 """ 00000101 00010100 4+16 = 20 """ # >> 右移 '''n>>m n除以2的m次幂''' res = 5 >> 1 """ 00000101 00000010 """ print(res) # ^ 按位异或 """两个值[不相同]方为真,两个值[相同]方为假""" res = var1 ^ var2 ''' 10011 01111 11100 ''' print(res) # ~ 按位非 - ( n+1 ) res = ~19 res = ~-21 print(res) # 运算符的优先级 ''' 一元运算符: 同一时间只操作一个数字运算的 ( ~ - ) ~19 二元运算符: 同一时间只操作两个数字运算的 (+ - * /) 5 + 3 整体一元运算符优先级 > 二元运算符 所有运算符当中 ** 幂运算优先级最高 所有运算符当中 = 赋值运算符优先级最低 单独的一种运算符优先级顺序如下: 乘 除 > 加 减 () > not > and > or ~ > (<< >>)> & > ^ > | 除此之外,剩下的运算符优先级如下: 算数运算符 > 位运算符 > 比较运算符 > 身份运算符 > 成员运算符 > 逻辑运算符 赋值运算符 单独拿出来作为最后,把值计算好之后再进行赋值 ''' res = 5+5 << 6 // 3 is 40 and True print(res) # True ''' 5+5 << 2 is 40 and True 10 << 2 is 40 and True 40 is 40 and True True and True => True ''' # 用一个小括号抱起来 作为一个整体,让别人能够看懂代码 res = (5+5) << (6 // 3) is 40 and True print(res)