逻辑与按位

I15*_*159 5 python logical-operators

什么逻辑运营商之间的不同and,or和位类似物&,|在使用?各种解决方案的效率有何不同?

Abu*_*oeb 11

按位= 逐位检查

例子

Bitwise AND: 1011 & 0101 = 0001
Bitwise OR: 1011 | 0101 = 1111
Run Code Online (Sandbox Code Playgroud)

逻辑= 逻辑检查,或者换句话说,你可以说True/False检查

例子

Logical AND: 1011 && 0101 = 1 (True) # both are non-zero so the result is True
Logical AND: 1011 && 0000 = 0 (False) # one number is zero so the result is False 
Logical OR: 1011 || 0000 = 1 (True) # one number is non-zero so the result is non-zero which is True
Logical OR: 0000 || 0000 = 0 (False) # both numbers are zero so the result is zero which is False
Run Code Online (Sandbox Code Playgroud)


Dan*_*den 8

逻辑运算符用于布尔值,因为true等于 1 和false等于 0。如果您使用 1 和 0 以外的(二进制)数,则任何不为零的数都变为 1。
例如:int x = 5;(101 in binary) int y = 0;(0 in binary) 在这种情况下,printingx && y会打印0,因为 101 被更改为 1,并且 0 保持为零:这与printing 相同true && false,它返回false(0)。

另一方面,按位运算符对两个操作数的每一位执行操作(因此称为“按位”)。
例如:int x = 5; int y = 8;打印x | y(按位或)将计算出:
000101 (5)
| 1000(8)
-----------
= 1101(13) 这
意味着它会打印13


Cat*_*lus 7

逻辑运算符对逻辑值进行操作,而按位运算符对整数位进行操作.停止考虑性能,并将它们用于它们的意图.

if x and y: # logical operation
   ...
z = z & 0xFF # bitwise operation
Run Code Online (Sandbox Code Playgroud)

  • 关于性能问题.由于`和`和`或'是从左到右工作的"短路"操作符,你会发现`a和(某些东西非常昂贵)`完全不同于'a&(某些东西)非常昂贵的)`当`a`是假的.短路评估根本不是微不足道的影响.这是深刻的. (10认同)
  • 在性能问题上:通常这些低级操作之间的差异会影响程序的整体性能,大约为10**6或更多次迭代.如果您(OP!)需要多次执行该操作,您可能应该完全切换到数字/科学库,如numpy/scipy. (3认同)