Я изучал операторы сдвига в C#, пытаясь узнать, когда использовать их в моем коде.
Я нашел ответ, но для Java, Вы могли:
a) Сделайте более быстрое целочисленное умножение и операции деления:
*4839534 * 4* может быть сделан как это: 4839534 <<2
или
543894/2 может быть сделан как это: 543894>> 1
Операции сдвига, намного больше быстрее, чем умножение для большинства процессоров.
b) Повторная сборка потоков байтов к международным значениям
c) Для ускорения операций с графикой, так как Красные, Зеленые и Синие цвета кодируются отдельными байтами.
d) Упаковка небольших чисел в один сингл долго...
Для b c и d я не могу вообразить здесь реальный образец.
Кто-либо знает, можем ли мы выполнить все эти объекты в C#? Есть ли более практическое применение для операторов сдвига в C#?
Нет необходимости использовать их в целях оптимизации, потому что компилятор позаботится об этом за вас.
Используйте их только тогда, когда смещение битов является реальной целью вашего кода (как в остальные примеры в вашем вопросе). В остальное время просто используйте умножение и деление, чтобы читатели вашего кода могли понять его с первого взгляда.
Ознакомьтесь с этими статьями в Википедии о двоичной системе счисления и арифметическом сдвиге . Думаю, они ответят на ваши вопросы.
Операторы смены сегодня редко встречаются в бизнес-приложениях. Они будут часто появляться в низкоуровневом коде, который взаимодействует с оборудованием или манипулирует упакованными данными. Они были более распространены во времена сегментов памяти 64k.
Если нет очень веской причины, я считаю, что использование подобных хитрых уловок обычно дает больше запутанный код с небольшой добавленной стоимостью. Авторы компилятора - это умная группа разработчиков, которые знают об этих приемах гораздо больше, чем средний программист. Например, деление целого числа на степень 2 быстрее с оператором сдвига, чем деление, но, вероятно, в этом нет необходимости, поскольку компилятор сделает это за вас.