Python 中的位运算符

Bitwise operators in Python

这里不是本地程序员(医学背景)。我正在寻找一个按位运算符,它可以在以下条件下给出以下结果。编程语言是 Python 但应该不太相关:

condition1 condition2 result
0          1          0
1          1          1
1          0          1
0          0          1

仅靠一名操作员就可以实现吗?代码会是什么样子?我知道它可以通过 if/else 语句来实现,但我有兴趣了解新的编程领域。

您可以使用 condition1**condition2

>>> 0**1
0
>>> 1**1
1
>>> 1**0
1
>>> 0**0
1

或更一般地 condition1 OR (NOT condition2)

这显然是not (not A and B)
使用德摩根 A or not B
按位表示 A | ~B

|是或,~是反转(不是)

除第一个案例外,每个案例的预期结果都是 1。

第一种情况(condition1为0,condition2为1)描述为~condition1 & condition2

该表达式的反义词是

condition1 | ~condition2

所以这个表达式给出了每种情况的预期结果。


应要求,详细说明逻辑布尔运算和按位运算之间的区别。

如果我们有两个布尔值 A 和 B,我们想对它们执行“或”运算,我们使用 Python 运算符 or 并得到一个布尔值。

如果我们有两个整数A和B,我们想对它们进行按位“或”运算, 我们使用 Python 运算符 | 并返回一个 int,其位由操作对 A 和 B 中每个位的操作决定。

例如

如果 A 为 12,B 为 5,则它们具有以下位:

A   = 1100
B   = 0101
A|B = 1101

在这种情况下,结果A|B是二进制1101,十进制是13。

使用按位“非”运算符,结果有点难以理解。

数字1的二进制表示是最小位为1,其他位全部为0。所以当你执行 ~1 时,你不会得到零。你得到一个数字,除了最小的是零之外,每个位都是 1。

 1 = 00...001
~1 = 11...110

因为two's complement中存放的是int,11...110是数字-2的二进制表示。

所以尽管布尔 not 运算符给你 not 1==0(即 not True==False),按位 ~ 运算符给你 ~1 == -2,因为每个人位被翻转。