Сдвиг битов 1
обычно предназначен для ситуаций, когда у вас есть неисключительные значения, которые вы хотите сохранить.
Например, скажем, вы хотите иметь возможность рисовать линии на любой сторонекоробка.Вы определяете:
LEFT_SIDE = 1 << 0 # binary 0001 (1)
RIGHT_SIDE = 1 << 1 # binary 0010 (2)
TOP_SIDE = 1 << 2 # binary 0100 (4)
BOTTOM_SIDE = 1 << 3 # binary 1000 (8)
----
0111 (7) = LEFT_SIDE | RIGHT_SIDE | TOP_SIDE
Затем вы можете объединить их для нескольких сторон:
DrawBox (LEFT_SIDE | RIGHT_SIDE | TOP_SIDE) # Don't draw line on bottom.
Тот факт, что они используют совершенно разные биты, означает, что они независимы друг от друга.Используя OR
их, вы получаете 1 | 2 | 4
, что равно 7
, и вы можете обнаружить каждый отдельный бит с помощью других логических операций (см. здесь и здесь для объясненияэти).
Если бы они были определены как 1, 2, 3 и 4, то вам, вероятно, придется либо сделать один вызов для каждой стороны, либо вам нужно будет передать четыре разных параметра, по одному на каждую сторону.В противном случае вы не могли бы определить разницу между LEFT and RIGHT
(1 + 2 = 3
) и TOP
(3
), поскольку оба они будут иметь одинаковое значение (с помощью простой операции сложения).
Материал 0x
- это просто шестнадцатеричные числа, которые легче увидеть как двоичные битовые маски (каждая шестнадцатеричная цифра точно соответствует четырем двоичным цифрам. Вы будете склонны видеть шаблоны, такие как 0x01
, 0x02
, 0x04
, 0x08
, 0x10
, 0x20
и т. Д., Поскольку они эквивалентны одиночному биту 1
, перемещающемуся в старшую значащую битовую позицию - эти значения эквивалентны двоичным 00000001
, 00000010
, 00000100
, 00001000
, 00010000
, 00100000
и т. Д.
В сторону: Как только вы привыкнете к гексагону, вам редко придется беспокоиться о 1 << n
вещи. Вы можете мгновенно распознать 0x4000
как двоичный файл 0100 0000 0000 0000
. Это менее очевидно, если вы увидите значение 16384 в коде, хотя некоторые из нас даже признают , что : -)