Отрицание -2147483648 невозможно в C / C ++?

#include <iostream>
#include <stdlib.h>

int main(int argc, char *argv[])
{

  int num=-2147483648;
  int positivenum=-num;
  int absval=abs(num);

  std::cout<<positivenum<<"\n";
  std::cout<<absval<<"\n";

  return 0;
}

Привет, мне очень любопытно, почему вывод приведенного выше кода равен

-2147483648
-2147483648

Теперь я знаю, что -2147483648 - наименьшее представимое число среди подписанных целых чисел (при условии, что int составляет 32 бита). Я бы предположил, что можно получить мусорные ответы только после того, как мы опустимся ниже этого числа. Но в этом случае +2147483648 покрывается 32-битным система целых чисел Итак, почему в обоих случаях отрицательный ответ?

5
задан smilingbuddha 3 December 2011 в 23:56
поделиться