 
  
   
  
  0000 0000 0000 0001(ноликов будет побольше) если результат отрицательный и побитово перемножаем с числом n. Таким образом получим 1 если n нечётное (имеет 1 в младшем разряде) и 0 если четное. Если результат положительный, то возвращаем 0. ЧЯДНТ?         
  
  int Constraint(int n_max, int n)
{
    return (n < n_max) ? n : 0;
}А компилятор с оптимизацией сделает следующее:
xor ecx, ecx  ; загрузит нолик в регистр ecx
mov edx, dword ptr [n]  ; загрузит переменную
mov eax, dword ptr [n_max]  ; загрузит максимальное значение
cmp edx, eax  ; сравнит их
сmovl ecx, edx  ; скопирует в регистр ecx значение переменной если результат предыдущей операции - меньше
mov dword ptr [n], ecx  ; загрузит значение в переменную