Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Справочник Java

& | ^ ~ << >> >>>

Побитовые операторы: работают с отдельными битами целых чисел — И, ИЛИ, исключающее ИЛИ, НЕ и сдвиги.

Доступно с: Java 1.0

Синтаксис

a & b   a | b   a ^ b   ~a   a << n   a >> n   a >>> n

Примеры

И, ИЛИ, исключающее ИЛИ и НЕ для чисел 12 (1100) и 10 (1010):

void main() {
    int a = 0b1100;
    int b = 0b1010;
 
    IO.println(a & b);
    IO.println(a | b);
    IO.println(a ^ b);
    IO.println(~a);
    IO.println(Integer.toBinaryString(a & b));
}

Результат:

8
14
6
-13
1000

Сдвиги: << умножает на степень двойки, >> делит с сохранением знака, >>> заполняет освободившиеся биты нулями:

void main() {
    IO.println(1 << 4);
    IO.println(100 >> 2);
    IO.println(-16 >> 2);
    IO.println(-16 >>> 28);
}

Результат:

16
25
-4
15

Набор флагов в одном числе: установка, проверка и сброс бита:

static final int READ = 1;
static final int WRITE = 1 << 1;
static final int EXEC = 1 << 2;
 
void main() {
    int perms = READ | WRITE;
    IO.println((perms & WRITE) != 0);
    IO.println((perms & EXEC) != 0);
 
    perms &= ~WRITE;
    IO.println(perms);
}

Результат:

true
false
1

Примечания

У побитовых операторов низкий приоритет: perms & WRITE != 0 не скомпилируется, нужны скобки (perms & WRITE) != 0. С boolean операторы & и | тоже работают, но, в отличие от && и ||, всегда вычисляют обе части. Для набора флагов из enum удобнее и понятнее EnumSet. Есть составные формы: &=, |=, ^=, <<=.

См. также

  • && || ! — Логические И, ИЛИ и НЕ для значений boolean.
  • Integer.toBinaryString() — Записывает число в двоичной системе. Рядом — toHexString() и toOctalString().
  • EnumSet — Множество значений одного enum. Работает как набор битовых флагов, но с понятным кодом.
  • += -= *= /= — Выполняет операцию и сразу записывает результат в ту же переменную.

Вопросы и ответы по теме

В учебнике

  • Побитовые операторы — Побитовые операторы Java: & | ^ ~, сдвиги << >> >>>, двоичная запись через Integer.toBinaryString, флаги и маски.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.