Там какое-либо преимущество к использованию' <<1' вместо '* 2'?

Взгляните на стандартный модуль shlex и измените одну копию его для соответствия синтаксису, который Вы используете для своей оболочки, это - хорошая начальная точка

, Если Вы хотите все питание полного решения для lexing/parsing, , ANTLR может генерировать Python также.

6
задан Vlad the Impala 21 September 2009 в 03:54
поделиться

6 ответов

Это быстрее на старых компиляторах, которые не оптимизируют вызовы * 2 путем выдачи инструкции сдвига влево. Эту оптимизацию действительно легко обнаружить, и любой достойный компилятор уже делает это.

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

17
ответ дан 8 December 2019 в 02:06
поделиться

Вы должны использовать * при умножении и << при битовом сдвиге. Они математически эквивалентны, но имеют разное семантическое значение. Например, если вы создаете поле флага, используйте битовый сдвиг. Если вы подсчитываете сумму, используйте умножение.

22
ответ дан 8 December 2019 в 02:06
поделиться

Он используется, когда вас интересуют отдельные биты данных, с которыми вы работаете. Например, если вы хотите установить старший байт слова равным 0x9A , вы не должны писать

n |= 0x9A * 256

. Вы должны написать:

n |= 0x9A << 8

Это проясняет, что вы работаете с битами, а не данные, которые они представляют.

6
ответ дан 8 December 2019 в 02:06
поделиться

Для некоторых архитектур сдвиг битов выполняется быстрее, чем умножение. Однако любой достойный компилятор оптимизирует * 2 (или любое умножение на степень 2) для сдвига битов влево (когда сдвиг битов будет быстрее).

2
ответ дан 8 December 2019 в 02:06
поделиться

Если вы используете старый компилятор C, предпочтительнее использовать побитовый. Для удобства чтения вы можете прокомментировать свой код.

1
ответ дан 8 December 2019 в 02:06
поделиться

Для удобочитаемости значений, используемых в качестве битовых полей:

enum Flags { UP       = (1<<0),
             DOWN     = (1<<1),
             STRANGE  = (1<<2),
             CHARM    = (1<<3),
             ...

, что, по моему мнению, предпочтительнее, чем '= 1, ..., = 2, ... = 4' или '= 1, ... = 2, = 2 * 2, ... = 2 * 3 ', особенно если у вас 8+ флагов.

2
ответ дан 8 December 2019 в 02:06
поделиться
Другие вопросы по тегам:

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