Короткий ответ таков: это зависит от того, какие вещи вы сравниваете. Однако в этом случае я предполагаю, что вы сравниваете две переменные друг с другом (в отличие от переменной и немедленной, и т. Д. c.)
Этот веб-сайт хотя и довольно старый, изучил, сколько тактовых циклов занимают разные инструкции на платформе x86. Здесь нас интересуют две инструкции: «И» и «CMP» (которые компилятор использует для & и == соответственно). Здесь мы видим, что обе эти инструкции занимают около 1/3 цикла, то есть вы можете выполнить 3 из них в среднем за 1 цикл. Сравните это с инструкцией "DIV", для выполнения которой (в 1996 году) потребовалось 23 цикла.
Однако здесь пропущена одна важная деталь. Инструкция «И» не достаточна для завершения искомого поведения. На самом деле, краткая компиляция на x86_64 предполагает, что вам нужны и инструкции «И», и «ТЕСТ» для версии «&», тогда как «==» просто использует инструкцию «CMP». Поскольку все эти инструкции эквивалентны в IP C, «==» будет на самом деле немного быстрее ... с 1996 года.
В настоящее время процессоры так хорошо оптимизируются на голом металлическом слое, что вы вряд ли заметишь разницу. Тем не менее, если вы хотите увидеть наверняка ... просто напишите тестовую программу и убедитесь сами.
Как отмечалось выше, хотя, даже если у вас есть степень 2, эти инструкции все еще не эквивалентно, так как он не работает для 0. Ну ... Я думаю, технически ноль НЕ является степенью 2. :) Однако, если вы хотите его раскрутить, используйте "==".