我一直在尝试实现类似于discord的权限计算器的功能(比如这个:https://discordapi.com/permissions.html)。我使用了combine_hex_number = hex_number | hex_number2
的逐位运算符来组合十六进制数。我的问题是,我需要使用哪些位运算符来检查hex_number
是否在hex_number2
内部。
您可以使用&
,即按位AND
。
if hex_number2 & hex_number == hex_number
如果你最初"组合"成一个数字的是一个比特(例如1、2、4、8、16等(,你只需要if hex_number2 & hex_number
,因为除了0
之外的任何结果都是你想要的。
为什么这样做:
"组合"实际上是一个逐位的OR
运算,所以例如,如果你要做5 | 19
(它给出23
(,你会看到两个数字中的每一个比特,如果其中一个是1
,那么得到的比特也会是1
(否则是0
(,如下所示:
5 00000101 OR
19 00010011 =
-------------
23 00010111
如果执行AND
操作,则执行类似的操作,但如果两个输入位都是1
,则每个结果位都为1
。所以,如果你做23 & 19
,你会得到19
,但如果你做了23 & 36
,你就会得到4
。
23 00010111 AND
19 00010011 =
-------------
19 00010011
23 00010111 AND
36 00100100 =
-------------
4 00000100
所以你可以通过做if x & y == y
来检查。(然而,这只适用于y
,它们是按位互斥的,因为它们不共享位。否则你会得到假阳性。(