Итак, что вы действительно хотите вычислить, это
result = (x & sign_bit) ? -(x & ~sign_bit) : x;
Но, конечно, вам не разрешены управляющие структуры.Первый шаг - переписать -(x & ~sign_bit)
, используя только операторы +
и ^
: (-1 ^ (x & ~sign_bit)) - -1
.Теперь обратите внимание, что если (x & sign_bit)
равно нулю, то (0 ^ (x & ~sign_bit)) - 0
равно x
.Теперь у нас есть
result = (x & sign_bit) ? (-1 ^ (x & ~sign_bit)) - -1 : (0 ^ (x & ~sign_bit)) - 0
Затем вам нужно просто заменить -1
и 0
функциями x
, которые генерируют эти значения в зависимости от знака, и вот, обе стороныусловие становится тем же выражением, и условие становится ненужным.