标志的按位运算?

我见过一些使用按位运算来创建选项/标志的代码。

例如,请考虑ssl 库中的以下示例:

# bitwise AND and NOT
ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3

# bitwise OR
client_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
client_context.options |= ssl.OP_NO_TLSv1
client_context.options |= ssl.OP_NO_TLSv1_1

这些标志的数值:

>>> ssl.OP_NO_SSLv3.value
33554432
>>> ssl.OP_NO_TLSv1.value
67108864
>>> ssl.OP_NO_TLSv1_1.value
268435456

我不明白这种创建标志的系统是如何工作的,或者这些数字是如何选择的。我已经研究了操作符的工作方式,但我仍然感到困惑。

有人可以解释一下这是如何工作的,以及适当的用例吗?

回答

当您以二进制形式查看它们时,这些数字似乎不那么随机了:)

>>> "{:032b}".format(ssl.OP_NO_SSLv3.value)
'00000010000000000000000000000000'

>>> "{:032b}".format(ssl.OP_NO_TLSv1.value)
'00000100000000000000000000000000'

>>> "{:032b}".format(ssl.OP_NO_TLSv1_1.value)
'00010000000000000000000000000000'

>>> client_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
... client_context.options |= ssl.OP_NO_TLSv1
... client_context.options |= ssl.OP_NO_TLSv1_1
>>> "{:032b}".format(client_context.options)
'10010110010100100000000001010100'

每个选项只是一个可以设置或清除的位。


以上是标志的按位运算?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>