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