为了账号安全,请及时绑定邮箱和手机立即绑定

布尔运算符与位运算符

布尔运算符与位运算符

HUH函数 2019-07-04 17:24:13
布尔运算符与位运算符我搞不懂什么时候应该使用布尔运算符和位运算符。and vs &, or vs |有人能启发我什么时候使用每一种,什么时候使用一种而另一种会影响我的结果?
查看完整描述

3 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

从理论上讲,andor直接来自布尔逻辑(因此对两个布尔逻辑进行操作以生成一个布尔值),而&|将布尔值和/或应用于整数的单个位。这里有很多关于后者到底是如何工作的问题。

以下是潜在影响您的结果的实际差异:

  1. and

    or

    短路,即

    True or sys.exit(1)

    不会退出,因为对于某个值(

    True or ...False and ...

    )在第一个操作数中,第二个操作数不会更改结果=不需要计算。但

    |

    &

    别短路-

    True | sys.exit(1)

    把你赶出REPL。
  2. (只适用于某些人?带有操作符重载的语言,包括Python:)

    &

    |

    是正常的操作人员,可能会超载-

    and

    or

    被伪造成语言(尽管至少在Python中,强制使用布尔语言的特殊方法可能会产生副作用)。
  3. (只适用于几种语言(见KennyTM的评论):)

    and

    or

    返回(总是?我从来没有真正理解这一点,我也不需要它)一个操作数的价值,而不是

    True

    False

    ..这不会改变布尔表达式在条件下的意义-

    1 or True

    1

    ,但是

    1

    也是真的。但是它曾经被用来模拟一个条件运算符(

    cond ? true_val : false_val

    在C语法中,

    true_val if cond else false_val

    在Python中使用了几年)。为

    &

    |

    ,结果类型取决于操作数如何重载各自的特殊方法(

    True & False

    False99 & 7

    3

    ,对于集合,它是联合/交叉.)。

但即使是当。a_boolean & another_boolean如果效果相同,正确的解决方案是使用and-仅仅是因为andor则与布尔表达式和条件关联。&|代表一点点的旋转。


查看完整回答
反对 回复 2019-07-04
?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

还有一个不同之处,让我困惑了一段时间:因为&(以及其他按位运算符)的优先级高于and(和其他布尔运算符)以下表达式的计算值不同:

0 < 1 & 0 < 2

对决

0 < 1 and 0 < 2

也就是说,第一次False因为它相当于0 < (1 & 0) < 2,因此0 < 0 < 2,因此0 < 0 and 0 < 2.


查看完整回答
反对 回复 2019-07-04
  • 3 回答
  • 0 关注
  • 780 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信