我见过一些使用按位运算来创建选项/标志的代码。
例如,请考虑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
Run Code Online (Sandbox Code Playgroud)
这些标志的数值:
>>> ssl.OP_NO_SSLv3.value
33554432
>>> ssl.OP_NO_TLSv1.value
67108864
>>> ssl.OP_NO_TLSv1_1.value
268435456
Run Code Online (Sandbox Code Playgroud)
我不明白这种创建标志的系统是如何工作的,或者这些数字是如何选择的。我已经研究了操作符的工作方式,但我仍然感到困惑。
有人可以解释一下这是如何工作的,以及适当的用例吗?