in,not in 操作符
in操作符可用于判断給数据是否包含于指定的数字序列、字符串、列表、元祖、集合中、或者判断所給值是否包含于所給字典的键中,not in则相反
注意: not 可对任意比较结果或者任意Boolean表达式中进行否定,且not在比较符中有最高优先级,or的优先级最低,所以 A and not B or C 等同于 (A and (not B)) or C.
如 字典:
>>> "shou" in {1:"i", 2:"shou", 3:"ke"}
False
>>> 1 in {1:"i", 2:"shou", 3:"ke"}
True
说明:针对字典来说,仅可用于判断所给值是否包含在字典的键中,即判断键是否存在
not in
>>> "mark" not in ["i", "shou"]
True
is , is not 操作符
操作符 is和is not 是比较两个对象是否相同
注意:如下
>>> list1 = ["i", "shou", "ke"]
>>> list2 = ["i", "shou", "ke"]
>>> list1 is not list2
True
>>> ["i", "shou", "ke"] is ["i", "shou", "ke"]
False
两个值相等的可变对象,不是同一对象。
and、or、not 操作符,分别代表逻辑:与、或、非
and和or就是所谓的短路运算符,参数总是从左到右运算,结果确认时就停止,返回短路运算符的值为最后计算的参数
1.and 运算:如果左边的运算、值或者对象为True,才会对右边求值并返回右侧的计算结果,否则就停止运算并输出表达式结果、值或者对象。
如:
>>> False and True
False
>>> 1 and 9+10
19 #注意输出结果为右侧的值
>>> 5 < 2 and True
False
>>> 0 and True
0
2.or 运算:对or左边的表达式求值,如果左边的运算、值或者对象为True,输出的表达式结果,停止对右边的表达式求值,如果左边的为False,则继续对右边的表达式求值并输出结果。
如:
>>> 5 + 1 or False
6 #注意,输出是左边的表达式结果
>>> False or 7 + 5
12 #注意,输出是右边的表达式结果
3.not 操作运算
如:
>>> not False
True
>>> not False
True
>>> not 3 < 5
False
4.位运算符
~ 取反操作符(对数值先加1再取反)
对每一个二进制位+1取反,如果二进制位为1则结果为0,否则为1
| 或操作符(化为两个二进制,有1则为1,其余为0)
两个二进制位,或运算,只要其中有一个位为1则结果为1,否则为0
& 与操作符(化为两个二进制,有0则为0,其余为1)
两个二进制位,与运算,如果两个二进制位相同则与结果等于二进制位自身,否则为0
^ 异或操作符(化为两个二进制,两个数相同则为0,其余为1)
两个二进制位,或运算,如果两个二进制位相同则异或结果为0,否则为1
3 --> 二进制:0000 0011
2 --> 二进制:0000 0010
>>> 2 ^ 3
1
说明:
2 ^ 3
0000 0010
^
0000 0011
---------
0000 0001 -->十进制:1
>>> 3^2^2
3
>>> 4^5^5
4
说明:一个数对另一个数进行两次异或运算,结果为其本身
>>> 2 | 3
3
说明:
2 | 3
0000 0010
|
0000 0011
---------
0000 0011 -->十进制:3
>>> 2 & 3
2
说明:
2 & 3
0000 0010
&
0000 0011
---------
0000 0010 -->十进制:2
>>> ~3
-4
说明:
~3
0000 0011
~
--------
1111 1100
符号位即最高位,为1则表示负数,计算机将其识别为补码(负数以补码形式存在),按补码的计算过程,可求其原码。计算过程:按照求负数补码的逆过程,符号位不变,数值部分最低位减1,然后取反。但是对二进制数来说,先减1后取反和先取反后加1得到的结果是一样的,故仍可采用取反再加1的方法。
方法一:
1111 1100
~
--------
1000 0011
+ 1
----------
1000 0100
方法二:
1111 1100
- 1
--------
1111 1011
~
----------
1000 0100 --> 十进制: -4
注:
1.符号位为0,表示正数,为1则表示负数;
2.正数的补码为其本身,负数的补码为原码取反后再加1
优先级从高到低,依次为~、&、^、|