位运算符:
按位运算符是把数字看成二进制数来进行计算
& 按位与运算符
相应的位数都为1,则该位的结果是1,否则为0
print(5 & 7)
"""
101
111
----
101
"""
| 按位或运算符
两个二进制位有一个1时,结果为1
print(5 | 7)
"""
101
111
----
111
"""
^ 按位异或运算符
二进制的两位相异时,结果为1
print(5 ^ 7)
"""
101
111
----
010
"""
~ 按位取反运算符
每个二进制数据位取反,1变0 ,0变1
print( ~5 )
补码 11111111111111111111111111111111
原码 1000000000000000000000000001
<< 左移动运算符
各二进制位全部移动若干位,由<<右侧的数字决定,高位丢弃,低位补零
print(2 <<2)
000000010
000001000
>> 右移动运算符
各二进制位全部右移动若干位,由>>右侧的数字决定
print(13 >> 2)
00000001101
00000000011
关系运算符和关系运算表达式
== | != | > | < | >= | <= |
---|---|---|---|---|---|
等于 | 不等于 | 大于 | 小于 | 大于等于 | 小于等于 |
关系运算表达式
1 + 2 > 3 +4
格式:
表达式1 关系运算符 表达式2
功能:
计算“表达式1”和“表达式2”的值
值:
如果关系成立,整个关系运算符表达式的值为真,否则为假
逻辑运算符
逻辑与
and
逻辑与运算表达式:
表达式1 and 表达式2
值:
如果表达式1的值为真,表达式2的值也为真,整体逻辑与运算表达式的值为真
如果表达式1的值为真,表达式2的值也为假,整体逻辑与运算表达式的值为假
如果表达式1的值为假,表达式2的值也为真,整体逻辑与运算表达式的值为假
如果表达式1的值为假,表达式2的值也为假,整体逻辑与运算表达式的值为假
【有一个为假就为假】
num1 = 10
num2 = 20
if (num1 + 1) and (num2 + 1):
print("*******************")
print(num1, num2)
短路原则
表达式1 and 表达式2 and 表达式3 and ······ 表达式3 and ········ and 表达式n
逻辑或
or
逻辑或运算表达式:
表达式1 or 表达式2
值:
表达式1的值为真,表达式2的值为真,逻辑或运算表达式为真
表达式1的值为真,表达式2的值为假,逻辑或运算表达式为真
表达式1的值为假,表达式2的值为真,逻辑或运算表达式为真
表达式1的值为假,表达式2的值为假,逻辑或运算表达式为假
【有一个为真就为真】
短路原则
表达式1 or 表达式2 or 表达式3 or ······ 表达式3 or ········ or 表达式n
num3 = 0
num4 = 1
if num3 or num4:
print("%%%%%%%%%%%%%%%")
逻辑非
not
逻辑非运算符表达式:
not 表达式
值:
如果表达式的值为真,整体逻辑非运算表达式为假
如果表达式的值为假,整体逻辑非运算表达式为真
【颠倒黑白】
if not 0:
print("[==----------")
成员运算符
in
如果在指定的序列中找到值返回Ture,否则返回False
not in
如果在指定的序列中没有找到值返回Ture,否则返回False
身份运算符
is
判断两个标识符是不是引用同一个对象
is not
判断两个标识符是不是引用不同的对象
运算符优先级
最高级1,**
2,~ + - 正负号(一元加减)
3, * / % //
4, + -
5, << >>
6, &
7, - |
8, <= < > >=
9,== !=
10,= %= += -= //=
11,is is not
12,in not in
13,not or and
从控制台输入一个年份,判断是否是闰年
能被4整除但是不能被100整除 或者 能被400整除
year = int(input("请输入年份:"))
if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0):
print("yes")
else:
print("no")