如何检查一个十六进制数是否包含其他十六进制数



我一直在尝试实现类似于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,它们是按位互斥的,因为它们不共享位。否则你会得到假阳性。(

最新更新