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
,因为每个人位被翻转。
这里不是本地程序员(医学背景)。我正在寻找一个按位运算符,它可以在以下条件下给出以下结果。编程语言是 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
,因为每个人位被翻转。