В Visual Studio 2010 следующая программа
#include <iostream>
using std::cout;
int main()
{
cout << -2147483646 << '\n';
cout << -2147483647 << '\n';
cout << -2147483648 << '\n'; // numeric_limits<int>::min()
cout << -2147483649 << '\n';
cout << -2147483650 << '\n';
cout << "..." << '\n';
cout << -4294967293 << '\n';
cout << -4294967294 << '\n';
cout << -4294967295 << '\n'; // -numeric_limits<unsigned int>::max()
cout << -4294967296 << '\n';
cout << -4294967297 << '\n';
}
генерирует следующий вывод
-2147483646
-2147483647
2147483648
2147483647
2147483646
...
3
2
1
-4294967296
-4294967297
Что происходит?
Является ли это стандартным поведением или ошибкой Visual Studio?
Изменить: Как указывало несколько человек, нет такой вещи, как отрицательный целочисленный литерал. Более подробную информацию см. В обзоре Кит Томпсон ниже.