【问题标题】:What are the meanings of the "~" and "&=" symbols in python?python中的“~”和“&=”符号是什么意思?
【发布时间】:2014-03-18 14:31:06
【问题描述】:

我在一个python群里看到了以下内容:

>> bookStyle = aui.AUI_NB_DEFAULT_STYLE
>> bookStyle &= ~(aui.AUI_NB_CLOSE_ON_ACTIVE_TAB)

你能解释一下第二个说法吗? &=~ 有什么作用?

【问题讨论】:

标签: python notation


【解决方案1】:

根据bitwise operators documentation

一元~(反转)运算符产生其普通或长整数参数的按位反转。 x 的按位求逆定义为 -(x+1)。它仅适用于整数。

&=可以这样理解

bookStyle = bookStyle & ~(aui.AUI_NB_CLOSE_ON_ACTIVE_TAB)

所以,我们基本上将aui.AUI_NB_CLOSE_ON_ACTIVE_TAB 的值取反,然后检查bookStyle 的取反值中的所有ON 位是否也为ON。

~ 可以用这样的 32 位算法更好地理解

5 可以像这样用 32 位二进制表示

print format(5 & (1 << 32) - 1, "032b")
# 00000000000000000000000000000101

现在,当我们执行~5 时,结果将是

print ~5
# -6

所以,让我们以二进制形式打印-6

print format(-6 & (1 << 32) - 1, "032b")
# 11111111111111111111111111111010

如果我们比较这些值,

00000000000000000000000000000101
11111111111111111111111111111010

你知道内部到底发生了什么。

【讨论】:

    【解决方案2】:

    那些是bitwise operators

    x & y 执行“按位与”。

    ~x 返回 x 的补数 - 将每个 1 换成 0 和每个 0 换成 1 得到的数字。

    【讨论】:

      【解决方案3】:

      ~x 是一元运算符,等效于数字的(-x)-1

      x &= y
      

      等价于

      x = x & y
      

      其中&amp; 代表二进制和。

      【讨论】:

        【解决方案4】:

        ~ 是二元取反运算符。

        bob &amp;= lucybob = bob &amp; lucy 的较短版本。基本上,按位AND 并存储结果值。

        更多相关信息 - Unary arithmetics and bitwise operations @Python docs

        【讨论】:

          【解决方案5】:

          (~) : 二进制补码运算符是一元的,具有“翻转”位的效果

          例如:

          a = 0011 1100
          (~a ) will give -61 which is 1100 0011 in 2's complement form due to a signed binary  number
          

          (&) : 如果两个操作数中都存在二进制 AND 运算符,则将其复制到结果中。

          a = 0011 1100
          b = 0000 1101
          (a & b) will give 12 which is 0000 1100
          

          【讨论】:

            猜你喜欢
            • 2010-09-29
            • 1970-01-01
            • 2016-06-21
            • 2015-02-13
            • 2013-06-29
            • 2011-04-18
            • 2011-03-07
            • 2021-03-23
            • 1970-01-01
            相关资源
            最近更新 更多