Ну, есть, по крайней мере, два способа низкого уровня определения того, является ли данное число четным или нет:
1. if (num%2 == 0) { /* even */ }
2. if ((num&1) == 0) { /* even */ }
Я считаю, что второй вариант будет гораздо более изящным и значимым, и тот, который я обычно использую. Но это не только вопрос вкуса; Фактическая производительность может различаться: обычно побитовые операции (такие как логические и здесь) намного эффективнее, чем операция mod (или div). Конечно, вы можете утверждать, что некоторые компиляторы смогут его оптимизировать в любом случае, и я согласен... но некоторые не будут.
Другой момент заключается в том, что второй может быть немного сложнее понять для менее опытных программистов. На этом я бы ответил, что это, вероятно, принесет пользу всем, если эти программисты займут это короткое время, чтобы понять подобные заявления.
Как вы думаете?
Данные два фрагмента верны только в том случае, если num
является либо неподписанным int, либо отрицательным числом с представлением двух дополнений. - Как некоторые комментарии righfuly состояние.