我是python的新手。我使用以下代码测试了我的解释器,
In [1]: 2 and 3
Out[1]: 3
In [2]: 3 and 2
Out[2]: 2
In [3]: 3 or 2
Out[3]: 3
In [4]: 2 or 3
Out[4]: 2
在上文中,请2=0010
和3=0011
。结果是,
+ 0010
0011
----
0010=2
但是Out[1]
给了3(不完全),out[2]
给了2(确切)。
两种情况有什么区别?
答案 0 :(得分:10)
您正在使用boolean logic or
and and
,这会短路(返回修复运算符结果的第一个操作数)。
您正在寻找binary bitwise operators,|
和&
:
>>> 0b10 & 0b1
0
>>> 0b10 | 0b1
3
or
运算符返回第一个操作数(如果它是true-y(非空或数字0)),否则返回第二个操作数,and
运算符返回第一个操作数,如果它是false-y,否则是第二个运营商。这就是为什么您看到3 and 2
返回2
,3 or 2
返回3
。 2
和3
都不为零,在布尔上下文中都是如此。
使用0
作为假值,您会看到:
>>> 3 and 0
0
>>> 3 or 0
3
>>> 0 and 3
0
>>> 0 or 3
3
答案 1 :(得分:6)
您正在寻找按位运算符
>>> 2 & 3
2
>>> 2 | 3
3
只需执行2 and 3
即可评估2
,True
,然后是3
(也是True
),Python会返回第二个数字。所以你得到3
。
使用2 or 3
时,它会短路并返回2
,因为2
为True
。
答案 2 :(得分:2)
您正在寻找按位和&
。
and
和or
是Python中的布尔运算符,而&
和|
是按位运算符。
示例 -
>>> 2 and 3
3
>>> 2 & 3
2
答案 3 :(得分:1)
使用&
,and
在python中是布尔AND
:
>>> 2 & 3
2
>>> 3 & 2
2