Отказ / Предупреждение:
Это микрооптимизация , и она никогда не повлияет на эффективность вашей программы так, чтобы ее могли измерить пользователи. Если вы отключите все оптимизации компилятора и запустите отличный профилировщик, вы сможете количественно оценить эффекты, но ни один пользователь никогда не заметит.
Это особенно верно для вашей ситуации, когда рассматриваемый код запускается только каждые несколько секунд. Время, потраченное на профилирование, вероятно, лучше потратить на улучшение других частей вашего приложения.
Кроме того, в этих ситуациях удобочитаемость всегда должна преобладать над микрооптимизацией без узких мест (хотя мой ответ ниже учитывает только эффективность времени выполнения, как было запрошено). Поэтому мой рекомендуемый код для использования в этой ситуации - x=true
, поскольку его легче всего читать и понимать.
Наконец, если добавление проверки улучшит скорость, компилятор, вероятно, уже знает это и сделает это за вас, так что вы не ошибетесь с x=true
(вот почему вы должны отключить оптимизацию перед запуском профилировщика) .
Ответ:
Единственный верный способ выяснить это - профилирование. Вы можете обнаружить, что тест 0 (x == false) вообще не требует времени, и поэтому его стоит включить из-за экономии времени, когда x оказывается верным. Или вы можете обнаружить, что проверка занимает достаточно много времени и тратит слишком много времени, когда x оказывается ложным.
Я предполагаю, что тест не нужен. Это связано с тем, что 0-тестирование и другие побитовые операции (и, или, и т. Д.) Выполняются настолько быстро, что я обычно рассматриваю их как занимающие одинаковое элементарное количество времени. И если 0-тестирование занимает столько же времени, сколько операция ИЛИ (при значении true), то 0-тест является излишней тратой времени. Конечно, профилирование может доказать, что я ошибаюсь, и мое предположение основано на неверных предположениях о побитовых операциях, поэтому, если вы решите запустить профилировщик и выяснить это, меня определенно заинтересуют результаты.