Оператор сдвига влево/вправо (<</>>) сдвигает первый операнд вправо в соответствии с количеством бит, заданным вторым операндом.
Пример использования логического сдвига влево (<<) числа 253 на 2 бита:

Если биты не терялись, то в результате получилось бы число 1012 (253 * 2 * 2), но поскольку длина числа ограничена, то произошло урезания и результатом стало число 244.
Пример использования логического сдвига вправо (>>) числа -127 на 2 бита:

Примечание: Если тип первого операнда – int или uint (32-разрядное число), начало сдвига задается пятью младшими разрядами второго операнда. Фактический сдвиг от 0 до 31 бит
Примечание: Если тип первого операнда – long или ulong (64-разрядное число), начало сдвига задается шестью младшими разрядами второго операнда. Фактический сдвиг от 0 до 63 бит.
Примечание: Старшие разряды, которые находятся не в диапазоне типа первого операнда, после смены отбрасываются, а пустые младшие разряды заполняются нулями. Операторы сдвига никогда не вызывают переполнений.
Источник: видеоурок Александра Шевчука "ВИДЕОУРОК №5. ЛОГИЧЕСКИЕ ОПЕРАЦИИ".
предыдущая статья