Вы бы использовали &
, поразрядное AND
.
if hex_number2 & hex_number == hex_number
Если бы исходная вещь, которую вы «объединили» в число, была одним битом (например, 1, 2, 4, 8 , 16, et c.) Вам просто нужно 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
, которые являются исключительными друг для друга, по битам, так как они не разделяют биты. В противном случае вы получите ложное срабатывание.)