布尔运算符与位运算符

布尔运算符与位运算符

我搞不懂什么时候应该使用布尔运算符和位运算符。

and vs &, or vs |

有人能启发我什么时候使用每一种,什么时候使用一种而另一种会影响我的结果?


HUH函数
浏览 783回答 3
3回答

GCT1015

从理论上讲,and和or直接来自布尔逻辑(因此对两个布尔逻辑进行操作以生成一个布尔值),而&和|将布尔值和/或应用于整数的单个位。这里有很多关于后者到底是如何工作的问题。以下是潜在影响您的结果的实际差异:and和or短路,即True or sys.exit(1)不会退出,因为对于某个值(True or ..., False and ...)在第一个操作数中,第二个操作数不会更改结果=不需要计算。但|和&别短路-True | sys.exit(1)把你赶出REPL。(只适用于某些人?带有操作符重载的语言,包括Python:)&和|是正常的操作人员,可能会超载-and和or被伪造成语言(尽管至少在Python中,强制使用布尔语言的特殊方法可能会产生副作用)。(只适用于几种语言(见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是False, 99 & 7是3,对于集合,它是联合/交叉.)。但即使是当。a_boolean & another_boolean如果效果相同,正确的解决方案是使用and-仅仅是因为and和or则与布尔表达式和条件关联。&和|代表一点点的旋转。

qq_遁去的一_1

还有一个不同之处,让我困惑了一段时间:因为&(以及其他按位运算符)的优先级高于and(和其他布尔运算符)以下表达式的计算值不同:0&nbsp;<&nbsp;1&nbsp;&&nbsp;0&nbsp;<&nbsp;2对决0&nbsp;<&nbsp;1&nbsp;and&nbsp;0&nbsp;<&nbsp;2也就是说,第一次False因为它相当于0 < (1 & 0) < 2,因此0 < 0 < 2,因此0 < 0 and 0 < 2.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python