Когда использовать Операторы сдвига <<>> в C#?

Я изучал операторы сдвига в C#, пытаясь узнать, когда использовать их в моем коде.

Я нашел ответ, но для Java, Вы могли:

a) Сделайте более быстрое целочисленное умножение и операции деления:

*4839534 * 4* может быть сделан как это: 4839534 <<2

или

543894/2 может быть сделан как это: 543894>> 1

Операции сдвига, намного больше быстрее, чем умножение для большинства процессоров.

b) Повторная сборка потоков байтов к международным значениям

c) Для ускорения операций с графикой, так как Красные, Зеленые и Синие цвета кодируются отдельными байтами.

d) Упаковка небольших чисел в один сингл долго...


Для b c и d я не могу вообразить здесь реальный образец.

Кто-либо знает, можем ли мы выполнить все эти объекты в C#? Есть ли более практическое применение для операторов сдвига в C#?

29
задан Jon Seigel 3 May 2010 в 02:53
поделиться

3 ответа

Нет необходимости использовать их в целях оптимизации, потому что компилятор позаботится об этом за вас.

Используйте их только тогда, когда смещение битов является реальной целью вашего кода (как в остальные примеры в вашем вопросе). В остальное время просто используйте умножение и деление, чтобы читатели вашего кода могли понять его с первого взгляда.

38
ответ дан 28 November 2019 в 01:01
поделиться

Ознакомьтесь с этими статьями в Википедии о двоичной системе счисления и арифметическом сдвиге . Думаю, они ответят на ваши вопросы.

Операторы смены сегодня редко встречаются в бизнес-приложениях. Они будут часто появляться в низкоуровневом коде, который взаимодействует с оборудованием или манипулирует упакованными данными. Они были более распространены во времена сегментов памяти 64k.

6
ответ дан 28 November 2019 в 01:01
поделиться

Если нет очень веской причины, я считаю, что использование подобных хитрых уловок обычно дает больше запутанный код с небольшой добавленной стоимостью. Авторы компилятора - это умная группа разработчиков, которые знают об этих приемах гораздо больше, чем средний программист. Например, деление целого числа на степень 2 быстрее с оператором сдвига, чем деление, но, вероятно, в этом нет необходимости, поскольку компилятор сделает это за вас.

17
ответ дан 28 November 2019 в 01:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: