Наибыстрейший способ проверки числа на чётность

При решении алгоритмических задач на LeetCode, часто возникает потребность в микрооптимизациях. Я понимаю, что с точки зрения читаемости кода наилучший способ для определении чётности это проверка остатка от деления:

if(n%2==0){ }

Но с точки зрения скорости выполнения, разве логическое умножение не будет быстрее?

if(n&1==0){ }

Ответы (1 шт):

Автор решения: MBo

Посмотрим, что сделает компилятор из этого кода: ассемблер справа.

Получается, что для обоих случаев сгенерируется одно и то же:

 test     al, 1
 jne      SHORT G_M29322_IG05

В любом случае, такие микрооптимизации стоит оставлять на самый конец.

При решении задач на leetcode и подобных стоит обдумать по очереди:

  • алгоритм, обеспечивающий наилучшую сложность - как вычислительную, так и по памяти
  • наиболее оптимальные структуры данных
  • минимизировать операции выделения памяти, если объём данных велик
  • применять функции из системных библиотек вместо ручной реализации - они могут дать существенный выигрыш, например, в Python (поскольку реализованы на C)
  • тут уже можно на уровне отдельных операторов вылавливать проценты производительности
→ Ссылка