如何检查一个十六进制数是否包含另一个十六进制数
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
,因为它们不共享位。否则你会得到误报。)
我一直在尝试完成类似于 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
,因为它们不共享位。否则你会得到误报。)