большие отрицательные целые литералы

В 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?

Изменить: Как указали несколько человек, не существует такой вещи, как отрицательный целочисленный литерал . См. Отличный ответ Кейта Томпсона ниже для получения более подробной информации.

10
задан Johan Råde 15 December 2011 в 15:04
поделиться