Если бы я хотел умножить число на 4, я бы написал * 4
. Если мое намерение состоит в том, чтобы сдвинуть влево несколько битов на 2 позиции, я бы написал << 2
.
По вопросу:
Почему в Java и C # есть операторы битовых сдвигов?
Я много работаю с двоичными данными, где Я не думаю о целых числах и т. Д. - просто двоично - и в этой области вполне логично использовать операторы сдвига постоянно.
Конечно, я мог бы напечатать * 2
и т. Д., Но то, что я действительно хочу сделать , это сдвинуть биты.
Это часто встречается в ряде областей, где байты имеют значение (например, графическое программирование, сериализация и т. Д.).
Кроме того, есть некоторые тонкости операций сдвига, когда вы не хотите, чтобы он вел себя как целое число, особенно при работе с краями ... правила для что происходит, когда вы слегка сдвигаете карту влево или биты в карты (-ve vs + ve и т. д.) хорошо понятны, но очень важны. Аналогично, поведение целочисленного умножения checked
/ unckecked
иногда очень важно.