首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >位运算和== vs !=运算符

位运算和== vs !=运算符
EN

Stack Overflow用户
提问于 2017-09-29 02:10:15
回答 2查看 62关注 0票数 0

我正在做一些Leetcode问题,我遇到了一个奇怪的问题:

代码语言:javascript
复制
for i in range(32):
        if(n&mask == 1):
            bits +=1
        mask <<=1
    return bits

这不管用。现在,如果不是比较它是否等于1,而是在它不同于0的时候做条件,它是有效的。

代码语言:javascript
复制
for i in range(32):
        if(n&mask != 0):
            bits +=1
        mask <<=1
    return bits

他们不是在用不同的方式做同样的事情吗?答案不应该是一样的吗?以下(https://leetcode.com/problems/number-of-1-bits/description/)中的问题

EN

回答 2

Stack Overflow用户

发布于 2017-09-29 02:14:37

不,正如你所发现的,它们是不一样的。听起来很明显,==1检查该值是否为1,!=0检查该值是否与0不同。您可能遗漏的是1和0以外的值是可能的。

a&b返回2个整数的按位and:1&1 == 1,但2&2 == 2,因此2&2 != 0,但不是1。

票数 2
EN

Stack Overflow用户

发布于 2017-09-29 02:47:06

and , or , not& , | , !是有区别的

and、or、not是逻辑运算符,& , | , !是按位运算符。

x or y:如果x为false,则为y,否则为x

x and y:如果x为false,则x为false,否则为y

not x:如果x为false,则为true,否则为false

快捷方式:

x and y:如果两者都不是false,则始终提供y

x or y:如果x和x都不为false,则始终提供x

什么是真正的false?

来自python官方文档:

任何对象都可以测试真值,以便在if或while条件中使用,或者用作下面的布尔运算的操作数。以下值被认为是假的:

任何数值类型的非零值,例如,0,0L,0.0,0j。

  • None
  • False
  • zero任何空序列,例如,'',(),[]。
  • 任何空映射,例如,用户定义类的非零值,如果该类定义了非零()或

()方法,当该方法返回整数0或布尔值False.2.5

  • All时,其他值被认为是真的--因此许多类型的对象总是真的。

除非另有说明,否则具有布尔值结果的操作和内置函数总是返回0或False表示false,返回1或true表示True。(重要的例外:布尔运算"or“和" and”总是返回它们的一个操作数。)

那么什么是按位运算符呢?

按位运算符处理位操作和加法:

|运算符不是加法(对真值表进行加法运算)和运算符不是乘法(对真值表进行乘法运算)

5|3 => 101 | 011 = 111,十进制数为7

5&3 => 101 & 011 = 001,等于1

您可以在python终端中查看这些内容

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46475735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档