# ### 位运算符 & | ~ ^ << >> var1 = 19 var2 = 15 # & 按位与 """ res = var1 & var2 print(res) """ ''' 000...10011 000...01111 000...00011 ''' # | 按位或 res = var1 | var2 ''' 000...10011 000...01111 000...11111 ''' print(res) # ^ 按位异或 res = var1 ^ var2 ''' 000...10011 000...01111 000...11100 ''' print(res) # << 左移 (左移 相当于乘以2的几次幂 n << m 相当于n乘2的m次幂) res = 5 << 1 res = 5 << 3 print(res) ''' 000...101 000..1010 ''' # >> 右移 (右移 相当于除以2的几次幂 n >> m 相当于n除2的m次幂) res = 5 >> 1 # 5 // 2的1次幂 => 2 res = 5 >> 2 # 5 // 2的2次幂 => 1 res = 5 >> 3 # 5 // 2的3次幂 => 0 print(res) ''' 000...101 000....10 =>2 000....01 =>1 ''' # ~ 按位非 (按位非 操作的二进制的补码, 对二进制的每一位进行取反,包括符号位) 公式:-(n+1) res = ~19 print(res) ''' 000...10011 (补码) 111...01100 (按位非) # 给补码求原码 111...01100 100...10011 (反码) 100...10100 (原码 = 反码+1) 十进制 => -20 ''' res= ~(-19) print(res) ''' 1000...10011 (原码) 1111...01100 (反码) 1111...01101 (补码) # 现在进行按位非 0000...10010 因为高位都是0是正数 原码 = 反码 = 补码 0000...10010 (原码) ''' """ 运算符的优先级: () 括号优先级最高 ** 优先级其次 = 优先级最低 一元运算符:同一时间只操作一个数字的 (- , ~) 二元运算符:同一时间能操作二个数字的 (+ , -...) ~19+5 一般来说,一元运算符 大于 二元运算符的优先级 + - * / => * / 大于 + - () not and or => not > and > or 如果都是二元运算符: 算术运算符 > 位运算符 > 比较运算符 > 身份运算符 > 成员运算符 > 逻辑运算符 赋值运算符 作为最后等号右边的值算好后进行赋值. """ res = 5+5 << 6 // 3 is 40 and True print(res) ''' 5+5 << 2 is 40 and True 10 << 2 is 40 and True 40 is 40 and True True and True True '''