#include <iostream>
#include <climits>
/* Отражаем 1 в 0 и 0 в 1 */
int flip(int bit) {
return 1^bit;
}
/* Возвращаем 1, если число положительное, и 0, если отрицательное*/
int sign(int a) {
return flip((a >> (sizeof(int) * CHAR_BIT - 1)) & 0x1);
}
int getMax(int a, int b) {
int c = a - b;
int sa = sign(a); // если a >= 0, то 1, иначе 0
int sb = sign(b); // если a >= 1, то 1, иначе 0
int sc = sign(c); // зависит от переполнения a - b
/* Цель: найти k, которое = 1, если а > b, и 0, если a < b.
* если a = b, k не имеет значения */
// Если у а и b равные знаки, то k = sign(a)
int use_sign_of_a = sa ^ sb;
// Если у a и b одинаковый знак, то k = sign(a - b)
int use_sign_of_c = flip(sa ^ sb);
int k = use_sign_of_a * sa + use_sign_of_c * sc;
int q = flip(k); // отражение к
return a * k + b * q;
}
int main() {
std::cout << getMax(4, 5);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y2xpbWl0cz4KIAovKiDQntGC0YDQsNC20LDQtdC8IDEg0LIgMCDQuCAwINCyIDEgKi8KaW50IGZsaXAoaW50IGJpdCkgewogICAgcmV0dXJuIDFeYml0Owp9CiAKLyog0JLQvtC30LLRgNCw0YnQsNC10LwgMSwg0LXRgdC70Lgg0YfQuNGB0LvQviDQv9C+0LvQvtC20LjRgtC10LvRjNC90L7QtSwg0LggMCwg0LXRgdC70Lgg0L7RgtGA0LjRhtCw0YLQtdC70YzQvdC+0LUqLwppbnQgc2lnbihpbnQgYSkgewogICAgcmV0dXJuIGZsaXAoKGEgPj4gKHNpemVvZihpbnQpICogQ0hBUl9CSVQgLSAxKSkgJiAweDEpOwp9CiAKaW50IGdldE1heChpbnQgYSwgaW50IGIpIHsKCWludCBjID0gYSAtIGI7CiAKCWludCBzYSA9IHNpZ24oYSk7IC8vINC10YHQu9C4IGEgPj0gMCwg0YLQviAxLCDQuNC90LDRh9C1IDAKCWludCBzYiA9IHNpZ24oYik7IC8vINC10YHQu9C4IGEgPj0gMSwg0YLQviAxLCDQuNC90LDRh9C1IDAKCWludCBzYyA9IHNpZ24oYyk7IC8vINC30LDQstC40YHQuNGCINC+0YIg0L/QtdGA0LXQv9C+0LvQvdC10L3QuNGPIGEgLSBiCiAKCS8qINCm0LXQu9GMOiDQvdCw0LnRgtC4IGssINC60L7RgtC+0YDQvtC1ID0gMSwg0LXRgdC70Lgg0LAgPiBiLCDQuCAwLCDQtdGB0LvQuCBhIDwgYi4KCSAqINC10YHQu9C4IGEgPSBiLCBrINC90LUg0LjQvNC10LXRgiDQt9C90LDRh9C10L3QuNGPICovCiAKCS8vINCV0YHQu9C4INGDINCwINC4IGIg0YDQsNCy0L3Ri9C1INC30L3QsNC60LgsINGC0L4gayA9IHNpZ24oYSkKCWludCB1c2Vfc2lnbl9vZl9hID0gc2EgXiBzYjsKIAoJLy8g0JXRgdC70Lgg0YMgYSDQuCBiINC+0LTQuNC90LDQutC+0LLRi9C5INC30L3QsNC6LCDRgtC+IGsgPSBzaWduKGEgLSBiKQoJaW50IHVzZV9zaWduX29mX2MgPSBmbGlwKHNhIF4gc2IpOwogCglpbnQgayA9IHVzZV9zaWduX29mX2EgKiBzYSArIHVzZV9zaWduX29mX2MgKiBzYzsKCWludCBxID0gZmxpcChrKTsgLy8g0L7RgtGA0LDQttC10L3QuNC1INC6CiAKCXJldHVybiBhICogayArIGIgKiBxOwp9CiAKaW50IG1haW4oKSB7CglzdGQ6OmNvdXQgPDwgZ2V0TWF4KDQsIDUpOwoJcmV0dXJuIDA7Cn0=