我在python组中看到以下内容:
>> bookStyle = aui.AUI_NB_DEFAULT_STYLE
>> bookStyle &= ~(aui.AUI_NB_CLOSE_ON_ACTIVE_TAB)
你能解释第二个陈述吗? &=
和~
做了什么?
答案 0 :(得分:4)
根据bitwise operators documentation,
一元
~
(反转)运算符产生其普通或长整数参数的按位反转。 x的按位求逆定义为 - (x + 1)。它仅适用于整数。
&=
可以像这样理解
bookStyle = bookStyle & ~(aui.AUI_NB_CLOSE_ON_ACTIVE_TAB)
因此,我们基本上反转aui.AUI_NB_CLOSE_ON_ACTIVE_TAB
的值,然后检查反转值中的所有ON位是否也在bookStyle
中为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
你了解内部究竟发生了什么。
答案 1 :(得分:0)
x&amp; y 是“按位和”。
~x 返回x的补码 - 通过将每个1切换为0并将每个0切换为1来获得的数字。
答案 2 :(得分:0)
~x
是一个一元运算符,相当于数字的(-x)-1
。
x &= y
相当于
x = x & y
其中&
代表二进制和。
答案 3 :(得分:0)
~
是二元转换运算符。
bob &= lucy
是bob = bob & lucy
的缩写版。基本上,按位AND
并存储结果值。
更多相关信息 - Unary arithmetics and bitwise operations @Python docs
答案 4 :(得分:0)
(〜):二元一元补语运算符是一元的,具有'翻转'位的效果
例如:
a = 0011 1100
(~a ) will give -61 which is 1100 0011 in 2's complement form due to a signed binary number
(&amp;):如果两个操作数都存在,二进制AND运算符会将一个位复制到结果中。
a = 0011 1100
b = 0000 1101
(a & b) will give 12 which is 0000 1100