逻辑运算符and
,or
和按位模拟&
,|
的使用情况有何不同?各种解决方案的效率有何不同?
答案 0 :(得分:7)
逻辑运算符对逻辑值进行操作,而按位运算符对整数位进行操作。停止考虑性能,并将它们用于它们的意义。
if x and y: # logical operation
...
z = z & 0xFF # bitwise operation
答案 1 :(得分:5)
按位 =逐位检查
示例
Bitwise AND: 1011 & 0101 = 0001
Bitwise OR: 1011 | 0101 = 1111
逻辑 =逻辑检查,换句话说,您可以说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
答案 2 :(得分:1)
逻辑运算符用于布尔值,因为true
等于1且false
等于0.如果使用除1和0之外的(二进制)数字,则任何非零的数字都将变为1。
例如:int x = 5;
(二进制为101)int y = 0;
(二进制为0)在这种情况下,打印x && y
将打印0
,因为101已更改为1 ,0保持为零:这与打印true && false
相同,后者返回false
(0)。
另一方面,按位运算符对两个操作数的每一位执行操作(因此术语“按位”)。
例如:int x = 5; int y = 8;
打印x | y
(按位或)会计算: 00 0101
(5)
{ {1}}(8)
-----------
| 1000
(11)
这意味着它会打印= 1011
。
答案 3 :(得分:-4)
逻辑运算符是:
&& || == !
它们允许您对逻辑值进行操作,例如:
(true || false) // evaluates to true
(!true) // evaluates to false
按位运算符是:
& | ^ ~
它们允许您对二进制位进行操作,如下所示:
~011 = 100
0101 & 0011 = 0001