Тридцать два бита можно рассматривать как вектор из тридцати двух единиц и нулей, а для извлечения отдельных битов можно использовать побитовую арифметику.
Например, если FLAG_FOO
является константойзначение которого является степенью двойки - скажем, 1024
- тогда flag_vector & FLAG_FOO != 0
подтверждает, что установлен определенный бит.Это потому, что &
является «побитовым и»;оно вычисляется как целое число, биты которого равны единице, где оба операндов биты равны единице, и ноль, где либо биты операнда равны нулю.Например, двоичный файл 00100110
&
двоичный файл 10000011
равен 00000010
.(За исключением того, что вы используете тридцать два битных целых числа, очевидно, вместо всего лишь восьми.)
И наоборот, «побитовое или», |
, может использоваться для построения такого значения;например, flag_vector = FLAG_FOO | FLAG_BAR | FLAG_BAZ
будет иметь три установленных бита (флаги).
Это используется, например, в java.util.regex.Pattern
классе , чей статический метод compile
перегружен впринять второй аргумент, состоящий из таких флагов.Pattern.compile("a.c", CASE_INSENSITIVE | DOTALL)
создает шаблон на основе строки a.c
, с включенными параметрами "без учета регистра" и ".
-represents-any-символ, -even-newline".