В 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?
Изменить: Как указали несколько человек, не существует такой вещи, как отрицательный целочисленный литерал . См. Отличный ответ Кейта Томпсона ниже для получения более подробной информации.