Большинство компиляторов преобразуют % 2 в битовое сравнение? Это действительно быстрее?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Большинство компиляторов преобразуют % 2 в битовое сравнение? Это действительно быстрее?

Сообщение Anonymous »

В программировании часто необходимо проверить, является ли число четным или нечетным. Для этого мы обычно используем:

Код: Выделить всё

n % 2 == 0
Однако я понимаю, что оператор «%» фактически выполняет деление и возвращает его остаток; поэтому в приведенном выше случае было бы быстрее просто проверить последний бит. Допустим, n = 5;

Код: Выделить всё

5 = 00000101
Чтобы проверить, является ли число четным или нечетным, нам просто нужно проверить последний бит. Если это 1, число нечетное; в противном случае оно четно. В программировании это выражалось бы так:

Код: Выделить всё

n & 1 == 0
Насколько я понимаю, это будет быстрее, чем % 2, поскольку деление не выполняется. Необходимо простое сравнение.

Тогда у меня 2 вопроса:

1) Действительно ли второй путь быстрее, чем первый (во всех случаях)?

2) Если ответ на вопрос 1 — да, достаточно ли умны компиляторы (на всех языках), чтобы преобразовать % 2 в простое сравнение битов? Или нам нужно явно использовать второй способ, если мы хотим добиться максимальной производительности?

Подробнее здесь: https://stackoverflow.com/questions/320 ... lly-faster
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»