Обычно я бы предпочел (number+1) & ~1
, , но не все признают эту идиому, поэтому вам, возможно, придется подумать о вашей аудитории.
В частности, если она должнаработают для отрицательных целых чисел, тогда реализации C-и C ++, не являющиеся двумя, не распознают идиому (она округляет нечетные отрицательные числа вместо отрицательных знаков + чисел и превращает отрицательные четные числа нечетными в дополнение к ним).), поэтому он не является полностью переносимым в случае, когда разрешен отрицательный ввод.
Переносимый ответ - (number % 2 == 0) ? number : number+1;
, и пусть компилятор беспокоится об оптимизации.
Остерегайтесь также, что у вас нетt определил, каким должен быть результат для INT_MAX
, что нечетно, но для которого не существует большего четного int
значения.