У меня есть интересная загадка. Мне нужно преобразовать число со знаком, скажем, -5 (0x80000005) в дополнение до двух -5 (0xFFFFFFFFB). Единственные операторы, которые я могу использовать, это !, ~, &, ^, |, +, ‹‹, >> и не более 15 из них в любой комбинации с любым количеством переменных, которое я хочу. = может использоваться и не учитывается при подсчете общего количества операторов. Кроме того, нельзя использовать операторы if, циклы или вызовы функций любого типа.
функция будет выглядеть
int sign2two(int x){
//... some stuff here
return x;
}
Проблема, с которой я сталкиваюсь, заключается в том, что я могу узнать, является ли число отрицательным. Но я хочу сказать, что если число отрицательное, то переверните биты и добавьте 1. В противном случае верните число. И я не могу понять, как это сделать. Спасибо.