'''
位运算符:按位运算是把数字看作是二进制数来计算
& / ^ ~ << >>
'''
#与运算: & (同 1 为 1,否则为 0)
print(5 & 7)
#或运算: | (有 1 为 1,同 0 则 0)
print(5 | 7)
#异或运算:^ (相同为 0,不同为 1)
print(5 ^ 7)
# 取反:~ (1 变为 0, 0 变为 1)
print(~2)
#左移运算符: << ()
#各二进制位全部左移若干位,高位丢弃,低位补零,<< 右侧的数字决定移动几位
print(2<<2)
#右移运算符: >> ()
#各二进制位全部右移若干位,高位丢弃,低位补零,<< 右侧的数字决定移动几位
print(10>>1)
'''
关系运算符和关系运算表达式
关系运算符:
== != > < >= <=
关系运算表达式:
格式: 【表达式1】 关系运算符 【表达式2】
功能:计算【表达式1】和【表达式2】的值
值:如果关系成立,整个关系运算表达式的值为真,否则为假
'''
'''
逻辑运算符(3种)
逻辑与: and
逻辑与运算表达式: 【表达式1】 and 【表达式2】
值:【表达式1】【表达式2】同真为真,有假则为假
**短路原则:【表达式1】 and 【表达式2】 and 【表达式3】 .....and 【表达式n】
从前向后执行,遇到假就立刻停止
逻辑或: or
逻辑或运算表达式: 【表达式1】 or 【表达式2】
值:【表达式1】【表达式2】有一个为真就是真,都是假为假
**短路原则:【表达式1】 or 【表达式2】 or 【表达式3】 .....or 【表达式n】
从前向后执行,遇到真就立刻停止
逻辑非: not
逻辑非运算表达式: not 【表达式1】
值:真变假,假变真
'''
'''
成员运算符
in:如果在指定序列中找到值返回True,否则返回False
not in:如果在指定序列中没有找到值返回True,否则返回False
'''
'''
身份运算符
is:判断两个标识符是不是引用同一个对象
is not:判断两个标识符是不是引用不同的对象
'''
'''
运算符优先级
**
~ +(正) -(负)
* / % //
+(加) -(减)
>> <<
&
^ |
<= < > >=
== !=
= %= += -= //= **= /=
is is not
in not in
not or and
'''
print(~2)
'''
取反过程:
内存中都是补码的形式存储
2在内存中存的补码是 00000000 00000000 00000000 00000010
2在内存中存的补码取反 11111111 11111111 11111111 11111101
求原码(除符号位,逐位取反,末位+1) 10000000 00000000 00000000 00000011
则结果为-3
'''