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 ; загрузит значение в переменную