Допустим, я хочу сдвинуть бит i дважды влево и сохранить значение в f.
i
f
f = i << 2;
Это правильно? Как именно я делаю это в C / C ++?
Да.
f = i << 2
Сдвиги полезны во многих битовых операциях.
Раньше это был отличный способ умножить число на четыре. Однако в наши дни оптимизирующие компиляторы обычно позаботятся об этом за вас.
Помните, что два крайних левых бита отбрасываются.
Как дополнительное примечание: даже если ваш вопрос помечен C++, вероятно, стоит отметить, что C и C ++ выбрали несколько разные пути в отношении смещения отрицательных значений. В C ++ результат выполнения << или >> для отрицательного значения определяется реализацией. В C >> определяется реализацией, а << выдает неопределенное поведение .
C++
<<
>>
Да, i << 2, f = i << 2 или f <<= 2 - это все, что нужно для сдвига битов.
i << 2
f <<= 2
Больше вещей, которые нужно помнить:
у вас также есть >>. На уровне битов >> работает по-разному для типов со знаком и без знака.
приоритет << и >> ниже приоритета + и -, что вводит некоторых людей в заблуждение, поскольку можно представить, что они больше похожи на * и /
+
-
*
/
Для полноты картины, чтобы помочь вам с вашими битовыми операциями, вы можете проверить эту страницу: uow TEXTBOOK -> bitops.html