Может быть полезно отметить, что когда C ++ видит операцию modulo 2
как %2
, он обычно оптимизируется без выполнения побитовых операций.
Хотя было бы поучительно понимать все подобные уловки, было бы приятно знать, что компилятор (или создатель компилятора) делает тяжелую работу, чтобы получить все возможные оптимизации.
Что вы должны помнить, так это то, что если вы используете константы и работаете с степенями 2, оптимизация более вероятна, поскольку компиляторы используют возможности бинарных операторов машины.
Если пойти дальше, я бы предложил получить знания о том, как работают системы на низком уровне.
С этой целью обучающие трюки, на которые вы ссылаетесь здесь, будут очень полезными .
Однако загадочное кодирование со сложными операциями, соединенными вместе
(скажем, делать все это с меньшим количеством байтов исходного кода) не годится.
Может быть, полезно знать, что вы можете поменять местами две 32-битные переменные без третьей временной переменной - с помощью операций XOR. Но было бы гораздо полезнее знать, как для кросс-компиляции требуется обработка с прямым и обратным порядком байтов для 2/4 байтовых переменных и битовые поля .
Говоря о битовых полях, напоминает мне еще один стек-разговор об их популярности . Также было бы хорошо читать (хотя и не полностью связано с вашим вопросом).
Подводя итог, я полностью с вами в изучении того, что можно сделать. Я хочу использовать их, чтобы заставить мой код работать лучше, и, я твердо убежден, что такие понятия, как , помогут программистам улучшить оптимизацию кэша , например, которые помогут сделать более качественные реализации.