# 逻辑运算符 逻辑与and 逻辑或or 逻辑not
# and全真为真
print(2 > 1 and 5 > 3 and 10 > 2) # True
print(3 > 2 and 5 < 4 and 6 > 1) # False
# or全假为假
print(3 > 2 or 5 < 4 or 6 > 1) # True
print(3 < 2 or 5 < 4 or 6 < 1) # False
# not 逻辑非运算,真变假,假变真
print(not(5 > 2))
逻辑运算的短路
# 逻辑与运算,只有所有的运算都是True,结果才是True
# 只有一个运算数是False,结果就是False
4 > 3 and print('hello world')
4 < 3 and print('你好世界') # 逻辑与运算的短路问题
# 逻辑或运算,全是False,结果才是False
# 只有一个运算数是True,结果就是True
4 > 3 or print('哈哈哈')
4 < 3 or print('嘿嘿嘿')
# 逻辑运算的结果,一定是布尔值吗? 不一定
# 逻辑与运算做取值时,取第一个为False的值,如果所有的运算数都是True,取最后一个值
print(3 and 5 and 0 and 'hello') # 0
print('good' and 'yes' and 100) # 100
# 逻辑或运算做取值时,取第一个为True的值,如果所有的运算数都是False,取最后一个值
print(0 or [] or 'lisi' or 5 or 'ok') # lisi
print(0 or [] or {} or ()) # ()
位运算符
# 按位与% 按位或| 按位异或^ 按位左移<< 按位右移>> 按位取反~
a = 23
b = 15
print(a & b)
print(a | b)
print(a ^ b)
x = 5
print(x << 2) # a * 2的n次方
print(x >> 2) # a / 2的n次方
位运算的短路
color = 0xF0384E
red = color >> 16
print(hex(red))
green = color >> 8 & 0xFF
print(hex(green))
blue = color & 0xFF
print(hex(blue))
运算符的优先级
print(10 - 2 * 3) # 24 4
# 逻辑运算的优先级: not > and > or
print(True or False and True) # True or False ==> True
print(True or True and False) # True or False ==> True
print(False or not False) # False or True ==> True
# 强烈建议: 在开发中,使用括号来说明运算符的优先级
print(True or True and False) # True
print(True or (True and False))
# 逻辑运算符规则:
# 逻辑与运算:只要有一个运算数是False,就是False。
# 只要遇到False语句就停止,不再继续执行
# 取值:取第一个为False,如果所有的运算数都是True,取最后一个运算数
# 逻辑或运算:只要有一个运算数是True,结果就是True;只有所有的运算数都是False,结果才是False
# 短路:只要遇到True就停止
# 取值:取第一个为True的值,如果所有运算数都是False,取最后一个运算数