学习python的第五天之逻辑运算符与位运算符
逻辑运算符
逻辑与and 逻辑或or 逻辑非not
-
逻辑与and
规则:只要有一个运算数是False,结果就是False;只有所有的运算数都是True,结果才是True。
print(2 > 1 and 5 > 3 and 10 > 2) #--> True print(3 > 2 and 5 < 4 and 10 > 6) #--> False
-
逻辑或or
规则:只要有一个运算数是True,结果就是True;只有所有的运算数都是False,结果才是False
print(3 > 9 or 4 < 7 or 10 < 3) #--> True print(3 > 5 or 4 < 2 or 8 < 7) #--> False
-
逻辑非not
规则:True ==> False;False ==> True
print(not(5 > 2)) #--> False
逻辑运算符的短路
-
与运算的短路问题
4 > 3 and print('hello world') #--> hello world 4 < 3 and print('你好世界') #不打印 你好世界
逻辑与运算,只有所有的运算数都是True,结果才为True;
只要有一个运算数是False,结果就是False。
第二句不打印的原因是:4 < 3 是False,所以后半句就不会再继续走了。 -
或运算的短路问题
4 > 3 or print('yes') #不打印 yes 4 < 3 or print('no') #--> no
逻辑或运算,只有所有的运算数都是False,结果才是False;
只要有一个运算数是True,结果就是True。
第一句不打印的原因是:4 > 3 是True,所以后半句就不会再继续走了。 -
逻辑运算的结果不一定是布尔值
逻辑与运算做取值时,取第一个为False的值 ;如果所有的运算数都是True,取最后一个值
print(3 and 5 and 0 and 'he1lo') #--> 0 print('good' and 'yes' and 'ok' and 100) #--> 100
逻辑或运算做取值时,取第一个为True的值;如果所有的运算数都是False,取最后一个值
print(0 or [] or 'lisi' or 5 or 'ok') #--> Lisi print(0 or [] or {} or ()) #--> ()
逻辑运算符规则:
逻辑与运算:
只要有一个运算数是False,结果就是False;只有所有的运算数都是True,结果才是True
短路:只要遇到了False,就停止,不再继续执行了
取值:取第-一个为False,如果所有的运算数都是True,取最后一个运算数
逻辑或运算:
只要有一个运算数是True,结果就是True;只有所有的运算数都是False,结果才是False
短路:只要遇到了True,就停止,不再继续执行了
取值:取第一个为True的值,如果所有的运算数都是False,取最后一个运算数
位运算符
按位与& 按位或/ 按位异或^ 按位左移<< 按位右移>> 按位取反~
按位异或:相同为0,不同为1
按位或:只要有一个为1,就为1
按位与:同为1则为1,否则为0
按位左移:所有位向左移,空缺补0
按位左右移:所有位向右移,移出的位直接去掉
按位取反:略
a=23
b=15
print(a & b) #--> 7
print(a | b) #--> 31
print(a ^ b) #--> 24
print(a << 3) #--> 184 ==> a * 2 ** 3
print(a >> 3) #--> 2 ==> a // 2 ** 3
print(~ a) #--> -24
例题:使用位运算,获取到十六进制颜色 0xF0384E 的RGB值,以十进制形式打印输出。
color = 0xF0384E
red = color >> 16
green = color >> 8 & 0xFF
blue = color & 0xFF
print(hex(red), hex(green), hex(blue))
运算符的优先级
逻辑运算的优先级:not > and > or
强烈建议:在开发中,使用括号来说明运算符的优先级
print(10 + 2 * 3 ** 2) #--> 28
print(True or False and True ) #--> Ture or False ==> True
print(False or not False) #--> False or Ture ==> True
print(True or True and False ) #--> Ture or False ==> True
print((True or True ) and False) #--> True and False ==> False
进制表示方式
二进制前用0b表示;转二进制用bin()
八进制前用0o表示;转八进制用oct()
十进制前不需要表示;转十进制用bin()
十六进制前用0x表示;转十六进制用hex()
a = 0b01001011 # 二进制
# 转十进制
b = int(a) #--> 75
# 转八进制
c = oct(a) #--> 0o113
# 转十六进制
d = hex(a) #--> 0x4b
# 转二进制
e = bin(b) #--> 0b01001011