Java - вектор двоичных флагов - PullRequest
0 голосов
/ 25 февраля 2012

Если мне говорят, что определенная функция вернет вектор двоичных флагов (32-битное значение типа int), что это значит?Можете ли вы привести пример, который демонстрирует это?

Большое спасибо.

1 Ответ

1 голос
/ 25 февраля 2012

Тридцать два бита можно рассматривать как вектор из тридцати двух единиц и нулей, а для извлечения отдельных битов можно использовать побитовую арифметику.

Например, если 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".

...