Самый эффективный способ определить, является ли целое число нечетным или четным, используя современные методы C ++ - PullRequest
0 голосов
/ 26 мая 2020

Я написал эту простую вспомогательную constexpr функцию:

#include <cstdint>

constexpr bool isEven(uint32_t value) { return ((value%2) == 0); }

Это довольно просто. Мне было интересно, будет ли это считаться наиболее эффективным способом определить, является ли какое-то целое значение нечетным или четным? На данный момент я не беспокоюсь о том, чтобы создавать шаблоны этой функции для разных интегральных типов. Я просто ищу эффективность и производительность, помня о переносимости.

Edit

Чтобы дать некоторый контекст, я мог бы вызвать эту функцию в al oop которые могут повторяться от 100 000 раз до 100 000 000 или более ... Таким образом, эффективность здесь является ключевым фактором, но переносимость все еще остается фактором ... другие заявили в своих комментариях или ответах, однако я не был уверен, будут ли компиляторы оптимизировать оператор по модулю в этом контексте.

Что касается переносимости, я не был уверен, будет ли «порядок байтов» или «интегральные соглашения» ведущим фактором, определяющим, какую реализацию следует использовать. При рассмотрении системы, которая реализует только 1 дополнение вместо 2, или систему, которая использует Big Endian вместо Little, возможно, потребуется принять во внимание.

1 Ответ

3 голосов
/ 26 мая 2020

Вы можете напрямую использовать оператор & ( AND ).

Если x ваш int:

x & 1  // returns 1 if odd, else 0

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

...