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

How to check if a hex number contains another hex number

我一直在尝试完成类似于 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

如果您 "combined" 转换为数字的原始内容是单个位(例如 1、2、4、8、16 等),您只需要 if hex_number2 & hex_number 因为除此之外的任何结果0 将是您要找的。

为什么这样有效:

"combining" 实际上是一个按位 OR 操作,所以例如如果你做 5 | 19 (它给出 23),你会查看两个数字中的每一位,如果其中 一个 1,则结果位也将是 1(否则 0),像这样:

 5   00000101 OR
19   00010011 =
-------------
23   00010111

如果你做一个 AND 操作,你会做类似的事情,但是每个结果位是 1 如果 both 输入位是 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,因为它们不共享位。否则你会得到误报。)