Основные битовые операторы:
- & – операция побитовое И;
- | – операция побитовое ИЛИ;
- ^ – операция побитовое исключающее ИЛИ. У этой операции есть следующие особенности: при применении его к одному числу вторично, с тем же параметром, возвращает первоначальное значение числа. Также с его помощью можно произвести обмен значений двух переменных, не вводя третью и без риска переполнения, так называемый XOR-обмен;
- ~ – оператор побитового отрицания, все биты исходного числа инвертируются (те что были равны 1 становятся равны 0, те что равны 0 будут равны 1)
- >> – сдвиг всех битов числа вправо, с учётом знака числа (операция a >> b выполняет деление числа а на 2 в степени b, округление при этом происходит вниз, то есть для положительных чисел эквивалентно a / pow(2, b), для отрицательных, не делящихся на a / pow(2, b) равно a / pow(2, b)-1;
- <<– сдвиг всех битов числа влево, с учётом знака числа (операция a << b выполняет умножение числа а на 2 в степени b);
- >>>– сдвиг всех битов числа вправо, без учёта знака числа.
Беззнаковый сдвиг влево не определён в Java, так как его действие эквивалентно знаковому сдвигу влево.
При выполнении операции беззнакового сдвига вправо самый левый бит заполняется 0 (самый левый бит определяет знак числа 0 – положительное и 1 — отрицательное), в то время как при выполнении обычного сдвига вправо последний бит не меняется.
Во всех операциях сдвига первый параметр – это число, которое нужно сдвинуть, а второй – на какое количество бит. Второй оператор не может быть больше, чем количество доступных разрядов (для int – это 31, long – 63). Если передать значение, превышающее количество разрядов, то будет использованы только младшие. Например, для переменной типа int операция x << 36 эквивалентна x << 5.