python中“~”和“&=”符号的含义是什么?

alw*_*btc 2 python notation

我在一个python组里看到了这样的内容:

>> bookStyle = aui.AUI_NB_DEFAULT_STYLE
>> bookStyle &= ~(aui.AUI_NB_CLOSE_ON_ACTIVE_TAB)
Run Code Online (Sandbox Code Playgroud)

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

the*_*eye 5

根据按位运算符文档

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

&=可以这样理解

bookStyle = bookStyle & ~(aui.AUI_NB_CLOSE_ON_ACTIVE_TAB)
Run Code Online (Sandbox Code Playgroud)

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

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

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

print format(5 & (1 << 32) - 1, "032b")
# 00000000000000000000000000000101
Run Code Online (Sandbox Code Playgroud)

现在,当我们这样做时,~5结果将是

print ~5
# -6
Run Code Online (Sandbox Code Playgroud)

那么,让我们-6以二进制打印

print format(-6 & (1 << 32) - 1, "032b")
# 11111111111111111111111111111010
Run Code Online (Sandbox Code Playgroud)

如果我们比较这些值,

00000000000000000000000000000101
11111111111111111111111111111010
Run Code Online (Sandbox Code Playgroud)

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