【发布时间】:2014-03-18 14:31:06
【问题描述】:
我在一个python群里看到了以下内容:
>> bookStyle = aui.AUI_NB_DEFAULT_STYLE
>> bookStyle &= ~(aui.AUI_NB_CLOSE_ON_ACTIVE_TAB)
你能解释一下第二个说法吗? &= 和 ~ 有什么作用?
【问题讨论】:
-
@C.B. 的链接比所有答案的组合更能说明问题
我在一个python群里看到了以下内容:
>> bookStyle = aui.AUI_NB_DEFAULT_STYLE
>> bookStyle &= ~(aui.AUI_NB_CLOSE_ON_ACTIVE_TAB)
你能解释一下第二个说法吗? &= 和 ~ 有什么作用?
【问题讨论】:
根据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
你知道内部到底发生了什么。
【讨论】:
x & y 执行“按位与”。
~x 返回 x 的补数 - 将每个 1 换成 0 和每个 0 换成 1 得到的数字。
【讨论】:
~x 是一元运算符,等效于数字的(-x)-1。
x &= y
等价于
x = x & y
其中& 代表二进制和。
【讨论】:
~ 是二元取反运算符。
bob &= lucy 是bob = bob & lucy 的较短版本。基本上,按位AND 并存储结果值。
更多相关信息 - Unary arithmetics and bitwise operations @Python docs
【讨论】:
(~) : 二进制补码运算符是一元的,具有“翻转”位的效果
例如:
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
【讨论】: