Печать типа значения unsigned long long int возвращает странные результаты

У меня возникла проблема при использовании функции printfдля печати значений типа unsigned long long int

. Я понятия не имею, что случилось. Я использую Dev -Cpp 4.9.9.2 и Visual Studio 2010 Professional (. Я знаю, что это не компилятор C, но в любом случае хотел попробовать )на Windows 7 Professional 64 -бит. Для отображения я использовал %lluмодификатор (в соответствии с . Как вывести unsigned long long int (спецификатор формата для unsigned long long int )?)но я также пробовал I64d безрезультатно...


Во-первых, я просто хотел напечатать минимальное и максимальное значениеunsigned long long int(используя ULONG_MAXизlimits.h)

printf("unsigned long long int: \n%llu to %llu \n\n", 0, ULONG_MAX);

Возвращает:

unsigned long long int: 18446744069414584320 to 1580552164021 (Dev-Cpp)

unsigned long long int: 18446744069414584320 to 0 (Visual Studio)


Затем я попытался использовать printfдля печати двух нулей

printf("unsigned long long int: \n%llu to %llu \n\n", 0, 0);

. Возвращает:

unsigned long long int: 0 to 1580552164021 (Dev-Cpp)

unsigned long long int: 0 to 0 (Visual Studio)


Также пробовал два значения ULONG_MAX

printf("unsigned long long int: \n%llu to %llu \n\n", ULONG_MAX, ULONG_MAX);

Возвращает:

unsigned long long int: 18446744073709551615 to 1580552164021 (Dev-Cpp)

unsigned long long int: 18446744073709551615 to 0 (Visual Studio)


Почему оно так себя ведет? Не могли бы вы объяснить это мне?

11
задан Community 23 May 2017 в 10:30
поделиться