@shayna.buckridge
Битовые операции на типе данных long в Java выполняются побитово над каждым битом двух операндов. Всего в типе данных long 64 бита. Операции выполняются над каждой парой битов из двух операндов, начиная с младших (с правого края) битов.
В Java используются следующие битовые операции над long:
- Побитовое И (&): Каждый бит результата будет равен 1, только если соответствующие биты обоих операндов равны 1. Иначе бит результата будет равен 0.
- Побитовое ИЛИ (|): Каждый бит результата будет равен 1, если хотя бы один из соответствующих битов обоих операндов равен 1. Иначе бит результата будет равен 0.
- Побитовое исключающее ИЛИ (^): Каждый бит результата будет равен 1, только если соответствующие биты обоих операндов отличаются. Иначе бит результата будет равен 0.
- Побитовый сдвиг влево (<<): Каждый бит операнда слева будет сдвинут влево на указанное количество позиций. При этом, справа добавляются нули. Например, если у нас есть число 5 (binary: 101) и мы сдвигаем его влево на 2 позиции, то получим число 20 (binary: 10100).
- Побитовый сдвиг вправо (>>): Каждый бит операнда справа будет сдвинут вправо на указанное количество позиций. При этом, слева добавляются нули. Если исходное число отрицательное, то сдвиг будет арифметическим, т.е. со знаком. Например, если у нас есть число -7 (binary: 1111111111111111111111111111111111111111111111111111111111111001) и мы сдвигаем его вправо на 2 позиции, то получим число -2 (binary: 1111111111111111111111111111111111111111111111111111111111111110).
- Побитовый сдвиг вправо с заполнением нулями (>>>): Каждый бит операнда справа будет сдвинут вправо на указанное количество позиций. При этом, слева добавляются нули. В отличие от побитового сдвига вправо (>>), при использовании оператора (>>>) сдвиг всегда будет логическим, даже если исходное число отрицательное. Например, если у нас есть число -7 (binary: 1111111111111111111111111111111111111111111111111111111111111001) и мы сдвигаем его вправо на 2 позиции, то получим число 4611686018427387900 (binary: 0011111111111111111111111111111111111111111111111111111111111110).
- Побитовый унарный оператор НЕ (~): Инвертирует каждый бит операнда. Т.е. каждый бит, равный 0, станет 1, а каждый бит, равный 1, станет 0.