布尔运算符与按位运算符

我对何时应该使用布尔运算符与按位运算符感到困惑

and vs &, or vs |

有人能启发我何时使用每种药物,何时使用一种药物会影响我的结果?

8个解决方案

56 votes

以下是一些准则:

布尔运算符通常用于布尔值,而按位运算符通常用于整数值。

布尔运算符是短路,但按位运算符不是短路。

短路行为在这样的表达式中很有用:

if x is not None and x.foo == 42:

# ...

这将无法按位&运算符正常工作,因为将始终对双方进行求值,得出AttributeError: 'NoneType' object has no attribute 'foo'。当使用布尔值and489运算符时,当第一个表达式为False时,不会评估第二个表达式。 同样,如果第一个参数为True,则or不评估第二个参数。

Mark Byers answered 2019-10-09T06:20:20Z

18 votes

理论上,2561282536966961999872和and直接来自布尔逻辑(因此对两个布尔进行运算以产生布尔),而and和or将布尔值和/或应用于整数的各个位。 这里有很多关于后者如何精确工作的问题。

以下是可能会影响您结果的实际差异:

a_boolean & another_boolean和and短路,即2561282536966961999874不会退出,因为对于第一个操作数的某个值(or,25612825369619991999876),第二个操作数不会更改结果=不需要求值。 但是25612825369619991999和1不会短路-2561282536966961999879会让您脱离REPL。

(仅适用于某些带有运算符重载的语言,包括Python :) a_boolean & another_boolean和and是常规运算符,可以重载-and和or被伪造成该语言(尽管至少在Python中,强制布尔化的特殊方法可能具有 副作用)。

(仅适用于几种语言[请参阅KennyTM的评论] :) 2561282536966961999872和and返回(总是?从来没有真正理解过,也不需要它)操作数的值,而不是25612825369619991999874或25612825369619991999875。这不会改变含义 条件中的布尔表达式的总和-25612825369619991999是2561282536966961999877,但1也是如此。 但是它曾经被用来模拟条件运算符(几年后使用C语法为2561282536966961999879,使用Python则为2561282536966961999880)。 对于25612825369619991999和|,结果类型取决于操作数如何重载相应的特殊方法(True & False为False、25612825369619991999885为25612825369619991999886,对于集合,其为并集/相交...)。

但即使例如 a_boolean & another_boolean可以相同地工作,正确的解决方案是使用2561282536966961999873-仅仅因为25612825369619991999874和or与布尔表达式和条件相关联,而&和25612825369619991999则代表位旋转。

answered 2019-10-09T06:21:35Z

14 votes

这是一个进一步的差异,刚才让我感到困惑的是:由于&(和其他按位运算符)的优先级高于False(和其他布尔运算符),因此以下表达式求值不同:

0 < 1 & 0 < 2

0 < 1 and 0 < 2

简而言之,第一个产生False,因为它等效于0 < (1 & 0) < 2,因此0 < 0 < 2,因此0 < 0 and 0 < 2。

Arend answered 2019-10-09T06:22:20Z

4 votes

如果您尝试在numpy中执行按元素进行布尔运算,则答案有些不同。 您可以将&和&和|用于按元素进行布尔运算,但是and和or将返回值错误。

为了安全起见,您可以使用numpy逻辑函数。

np.array([True, False, True]) | np.array([True, False, False])

# array([ True, False, True], dtype=bool)

np.array([True, False, True]) or np.array([True, False, False])

# ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

np.logical_or(np.array([True, False, True]), np.array([True, False, False]))

# array([ True, False, True], dtype=bool)

C8H10N4O2 answered 2019-10-09T06:23:11Z

2 votes

布尔运算是逻辑运算。

按位运算是对二进制位的运算。

按位运算:

>>> k = 1

>>> z = 3

>>> k & z

1

>>> k | z

3

操作:

And & 1 if both bits are 1, 0 otherwise

Or | 1 if either bit is 1

Xor ^ 1 if the bits are different, 0 if they're the same

Not ~ Flip each bit

按位运算的一些用法:

1)设置和清除位

布尔运算:

>>> k = True

>>> z = False

>>> k & z # and

False

>>> k | z # or

True

>>>

pyfunc answered 2019-10-09T06:24:27Z

2 votes

提示在名称中:

布尔运算符用于执行逻辑运算(编程和形式逻辑中常见的真相测试)

按位运算符用于“位扭曲”(字节和数字数据类型中的位的低级操作)

尽管可能并且确实有时(通常出于效率原因)希望使用按位运算符执行逻辑运算,但出于这种目的,通常应避免使用它们,以防止出现细微的错误和不良的副作用。

如果需要操纵位,则将按位构建按位运算符。 这本有趣的书:《 Hackers Delight》包含了一些酷而真正有用的示例,这些示例可以通过位旋转实现。

Tendayi Mawushe answered 2019-10-09T06:25:31Z

1 votes

一般规则是对现有的操作数使用适当的运算符。 将布尔(逻辑)运算符与布尔操作数一起使用,将按位运算符与(较宽)整数操作数一起使用(注意:False等于0,True等于1)。 唯一的“棘手”方案是将布尔运算符应用于非布尔操作数。

让我们举一个简单的示例,如[SO]中所述:Python-“和”与“&”之间的区别[重复项]:5 = 0b101

7 = 0b111

-----------------

5 & 7 = 0b101 = 5与5 and 7。

对于按位和(&),事情非常简单:

5 = 0b101

7 = 0b111

-----------------

5 & 7 = 0b101 = 5

对于逻辑和,这里是[Python 3]:布尔运算的状态(强调是我的):

(请注意,以及和或或限制值和类型都不会返回False和True,而是返回最后一个求值的参数。

例:

>>> 5 and 7

7

>>> 7 and 5

5

当然,| 与。

CristiFati answered 2019-10-09T06:26:58Z

0 votes

布尔值“ and”与按位“&”:

伪代码/ Python帮助我理解了两者之间的区别:

def boolAnd(A, B):

# boolean 'and' returns either A or B

if A == False:

return A

else:

return B

def bitwiseAnd(A , B):

# binary representation (e.g. 9 is '1001', 1 is '0001', etc.)

binA = binary(A)

binB = binary(B)

# perform boolean 'and' on each pair of binaries in (A, B)

# then return the result:

# equivalent to: return ''.join([x*y for (x,y) in zip(binA, binB)])

# assuming binA and binB are the same length

result = []

for i in range(len(binA)):

compar = boolAnd(binA[i], binB[i])

result.append(compar)

# we want to return a string of 1s and 0s, not a list

return ''.join(result)

Geoff Langenderfer answered 2019-10-09T06:27:41Z

java boolean 按位或_布尔运算符与按位运算符相关推荐

  1. python 按位运算符_Python按位运算符

    python 按位运算符 Python bitwise operators are used to perform bitwise calculations on integers. The inte ...

  2. 单片机C语言中的位运算符,单片机c语言教程第八课 运算符和表达式(位运算符)...

    学过汇编的朋友都知道汇编对位的处理能力是很强的,但是单片机C语言也能对运算对象进行按位操作,从而使单片机C语言也能具有一定的对硬件直接进行操作的能力.位运算符的作用是按位对变量进行运算,但是并不改变参 ...

  3. c语言位非运算符,C语言-位运算符

    C语言--位运算符 一.位运算符 1.按位与:& 1> 功能 * 只有对应的两个二进制位为1时,结果位才为1,否则为0 * 举例:10用二进制表示为1010,  7用二进制表示为0111 ...

  4. 按字节提取整形数值(按位与运算符“”、右移位运算符“”)

    输入一个十进制整数,将其转换成十六进制数输出,并提取每一字节所表示的十六进制数值逐一输出.测试数据如下: 分析:从控制台输入一个十进制整数,将其转换成十六进制数输出,接着提取其4个字节.用到按位与运算 ...

  5. python位运算符_NumPy按位运算符解析和实例详解

    本文概述 Numpy提供以下按位运算符. SN Operator Description 1 bitwise_and 它用于计算相应数组元素之间的按位运算. 2 bitwise_or 它用于计算相应数 ...

  6. --c语言运算符_C按位运算符-能力问题和解答

    --c语言运算符 C programming Bitwise Operators Aptitude Questions and Answers: In this section you will fi ...

  7. c语言中 amp amp 是位运算符吗,c语言位运算符(c语言位运算符的用法举例)

    C语言中的按位运算符 & | ^ ~ > 分别要怎么用?哪位大虾能详细讲解一下!!. 1.按位运算符就是直接对整数在内存中的二进制位进行操作运算.比如,&&运算本来是一个 ...

  8. 三个基本的布尔逻辑算符是_布尔逻辑检索的主要运算符有哪些

    展开全部 1."With":用于表示同时出现在同一文献的一个字段的两个词62616964757a686964616fe78988e69d8331333431373839,用With ...

  9. java中位与运算符_Java中位运算符和的区别

    一.<< 表示左移两位 < 注:以下数据类型默认为byte-8位 左移时不管正负,低位补0 正数:r = 20 << 2 正数:r = 20 << 2 20的 ...

最新文章

  1. 图解完整模式安装windows server 2008企业版[为企业部署Windows Server 2008系列四]
  2. C语言中在常数后面加U、L、F的功能
  3. 她发明了可以“喝的饭”,估值已超过10亿美金!从此每天多睡半小时....
  4. 一文彻底读懂优秀开源产品MyBatis一级缓存设计!
  5. 35 FI配置-财务会计-应收账款和应付账款-为客户定义备选统驭科目
  6. redis应用之——获取若干最新注册用户
  7. python入门经典-入门python有什么好的书籍推荐?
  8. php算法不大于n的质数,php求不大于n的质数
  9. 类型字节oracle 增强型时间类型以及postgresql时间类型
  10. 内涵! 程序员才懂的动图(太 TM 形象了)
  11. Atitit 图像处理 灰度图片 灰度化的原理与实现
  12. java 英语_Java常用英语汇总(更新升级版)
  13. python地震数据处理_Python爬虫之实时地震数据
  14. uniapp全端应用商城系统,应用市场APP,软件库APP,葫芦芥子博客
  15. 智慧农业,绿色农业智慧管理平台
  16. 如果这篇文章说不清epoll的本质,那就过来掐死我吧! (2)
  17. 网站流量模型(1)介绍
  18. 常用英语食品词汇- 调味品类
  19. Android实现蓝牙(BlueTooth)设备检测连接
  20. 【论文阅读】Video Generation from Single Semantic Label Map-CVPR2019

热门文章

  1. 新建html带参数,本地html加载时带参数的问题
  2. Anaconda入门使用指南(二)
  3. Science Bulletin:崔杰组发表了深浅海软甲纲动物比较病毒组学分析成果
  4. BMC:幼年特发性关节炎患儿肠道菌群的特征、生物标记的识别及其在临床预测中的作用...
  5. android studio ndk 书籍,NDK 在AndroidStudio3.2.1版本集成方法(ndk-build方式)
  6. RStudio启动后修改文件(数据)读取默认目录
  7. 密度聚类OPTICS算法
  8. 决策树ID3、决策树C4.5、决策树CART、CART树的生成、树的剪枝、从ID3到CART、从决策树生成规则、决策树优缺点
  9. ubunut离线redis配置_ubuntu安装redis及简单配置
  10. 打分矩阵Scoring Matrices