#include <iostream>
/* Отражаем 1 в 0 и 0 в 1 */
int flip(int bit) {
return 1^bit;
}
/* Возвращаем 1, если число положительное, и 0, если отрицательное*/
int sign(int a) {
return flip((a >> 31) & 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;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKLyog0J7RgtGA0LDQttCw0LXQvCAxINCyIDAg0LggMCDQsiAxICovCmludCBmbGlwKGludCBiaXQpIHsKICAgIHJldHVybiAxXmJpdDsKfQogCi8qINCS0L7Qt9Cy0YDQsNGJ0LDQtdC8IDEsINC10YHQu9C4INGH0LjRgdC70L4g0L/QvtC70L7QttC40YLQtdC70YzQvdC+0LUsINC4IDAsINC10YHQu9C4INC+0YLRgNC40YbQsNGC0LXQu9GM0L3QvtC1Ki8KaW50IHNpZ24oaW50IGEpIHsKICAgIHJldHVybiBmbGlwKChhID4+IDMxKSAmIDB4MSk7Cn0KCmludCBnZXRNYXgoaW50IGEsIGludCBiKSB7CglpbnQgYyA9IGEgLSBiOwoJCglpbnQgc2EgPSBzaWduKGEpOyAvLyDQtdGB0LvQuCBhID49IDAsINGC0L4gMSwg0LjQvdCw0YfQtSAwCglpbnQgc2IgPSBzaWduKGIpOyAvLyDQtdGB0LvQuCBhID49IDEsINGC0L4gMSwg0LjQvdCw0YfQtSAwCglpbnQgc2MgPSBzaWduKGMpOyAvLyDQt9Cw0LLQuNGB0LjRgiDQvtGCINC/0LXRgNC10L/QvtC70L3QtdC90LjRjyBhIC0gYgoJCgkvKiDQptC10LvRjDog0L3QsNC50YLQuCBrLCDQutC+0YLQvtGA0L7QtSA9IDEsINC10YHQu9C4INCwID4gYiwg0LggMCwg0LXRgdC70LggYSA8IGIuCgkgKiDQtdGB0LvQuCBhID0gYiwgayDQvdC1INC40LzQtdC10YIg0LfQvdCw0YfQtdC90LjRjyAqLwoKCS8vINCV0YHQu9C4INGDINCwINC4IGIg0YDQsNCy0L3Ri9C1INC30L3QsNC60LgsINGC0L4gayA9IHNpZ24oYSkKCWludCB1c2Vfc2lnbl9vZl9hID0gc2EgXiBzYjsKCQoJLy8g0JXRgdC70Lgg0YMgYSDQuCBiINC+0LTQuNC90LDQutC+0LLRi9C5INC30L3QsNC6LCDRgtC+IGsgPSBzaWduKGEgLSBiKQoJaW50IHVzZV9zaWduX29mX2MgPSBmbGlwKHNhIF4gc2IpOwoJCglpbnQgayA9IHVzZV9zaWduX29mX2EgKiBzYSArIHVzZV9zaWduX29mX2MgKiBzYzsKCWludCBxID0gZmxpcChrKTsgLy8g0L7RgtGA0LDQttC10L3QuNC1INC6CgoJcmV0dXJuIGEgKiBrICsgYiAqIHE7Cn0KCmludCBtYWluKCkgewoJc3RkOjpjb3V0IDw8IGdldE1heCg0LCA1KTsKCXJldHVybiAwOwp9