Чему научился:
Операторы сдвига работают с целыми числами. Преимущество в б0льшей скорости исполнения(если необходимо ускорить исполнение программы)
В Java все примитивные целочисленные типы имеют знак + или -
При сдвиге отрицательного числа старший разряд (отвечающий за знак) не меняет своего значения
сдвиг влево << двоичного числа ЭКВИВАЛЕНТЕН УМНОЖЕНИЮ НА ДВА Сдвиг влево << смещает ВСЕ биты влево на указанное количество позиций Самый старший бит смещается за пределы допустимого значения и теряется, а справа дописывается нуль. У операнда типа int биты теряются, если они сдвигаются за пределы 31 позиции. У типа long, биты теряются после сдвига за пределы 63 позиции.
СДВИГ ДВОИЧНОГО ЧИСЛА ВПРАВО >> эквивалентен делению на два Cдвиг вправо >> смещает ВСЕ биты значения вправо на указанное количество позиций Крайние биты при сдвиге просто теряются.
СДВИГ ВПРАВО >>> игнорирует неприкосновенность знакового бита, сдвигая и его на общих правилах
OR (|) Результирующий бит равен 1, если бит в любом из операндов равен 1.
AND (&) Значение бита равно 1, если биты в операндах равны 1. Иначе результат 0.
XOR (^) Результат равен 1, если бит ТОЛЬКО В ОДНОМ из операндов равен 1. Иначе 0.
NOT (~) (Не), ~, называемый побитовым дополнением, инвертирует все биты операнда.