отрицать плавающее число в с не удается в некоторых случаях

Я написал функцию, которая работает в сотнях случаев, но в некоторых случаях не работает.

Вот функция C:

unsigned negate_number(unsigned x) {
  int sign = (!(x & 0x80000000))<<31;
  int other = 0x7FFFFFFF & x;
  return (sign | other);
}

Я просто маскирую знак, переворачиваю его и делаю ИЛИ (соединение) с замаскированным показателем степени и Мантессой. Так что это должно работать во всех случаях.

Но вот случай, когда он терпит неудачу: x = 0x7fc00000 (2143289344)

Ответы на вопрос(1)

Ваш ответ на вопрос