Бит сдвигается влево - PullRequest
       17

Бит сдвигается влево

1 голос
/ 22 октября 2009

Допустим, я хочу сдвинуть бит i дважды влево и сохранить значение в f.

f = i << 2;

Это правильно? Как именно я делаю это в C / C ++?

Ответы [ 4 ]

9 голосов
/ 22 октября 2009

Да.

f = i << 2

Сдвиги полезны во многих битовых операциях.

Раньше это был отличный способ умножить число на четыре. Однако в наши дни оптимизирующие компиляторы обычно позаботятся об этом за вас.

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

8 голосов
/ 22 октября 2009

Как дополнительное примечание: даже если ваш вопрос помечен C++, вероятно, стоит отметить, что C и C ++ выбрали несколько разные пути в отношении смещения отрицательных значений. В C ++ результат выполнения << или >> для отрицательного значения определяется реализацией. В C >> определяется реализацией, а << выдает неопределенное поведение .

3 голосов
/ 22 октября 2009

Да, i << 2, f = i << 2 или f <<= 2 - это все, что нужно для сдвига битов.

Больше вещей, которые нужно помнить:

  • у вас также есть >>. На уровне битов >> работает по-разному для типов со знаком и без знака.

  • приоритет << и >> ниже приоритета + и -, что вводит некоторых людей в заблуждение, поскольку можно представить, что они больше похожи на * и /

0 голосов
/ 22 октября 2009

Для полноты картины, чтобы помочь вам с вашими битовыми операциями, вы можете проверить эту страницу: uow TEXTBOOK -> bitops.html

...