Это код, который я использую, чтобы найти символические значения констант для LONG
#include <limits.h> //These header files contains the symbolic constants
#include <float.h> //for different datatypes
#include <stdio.h>
int main(void){
printf("\tMininum numeric value for long type: %ld\n", LONG_MIN);
printf("\tMaximum numeric value for long type: %ld\n", LONG_MAX);
printf("\tMaximum numeric value for unsigned long type: %lu\n", (unsigned)ULONG_MAX);
return 0;
}
Вывод, который я получаю:
Mininum numeric value for long type: -9223372036854775808
Maximum numeric value for long type: 9223372036854775807
Maximum numeric value for unsigned long type: 4294967295
Но если посмотреть на limit.h со страницы руководства. Это символические константы для LONG_MIN
, LONG_MAX
, LLONG_MIN
а также LLONG_MAX
от limits.h
файл в моей системе.
{LONG_MIN}
Minimum value of type long.
Maximum Acceptable Value: -2 147 483 647
{LONG_MAX}
Maximum value of a long.
Minimum Acceptable Value: +2 147 483 647
{LLONG_MIN}
Minimum value of type long long.
Maximum Acceptable Value: -9223372036854775807
{LLONG_MAX}
Maximum value of type long long.
Minimum Acceptable Value: +9223372036854775807
Как будто программа выдаёт мне значения длинных символьных констант.
Почему это происходит?
Размеры типов являются переменными. long
является по крайней мере 32 бита (что дает диапазон + -2 миллиарда), но он может быть больше. В 64-битной системе это может быть, например, 64-битная.
long long
должно быть не менее 64 бит, но, конечно, может быть больше.
Эти размеры зависят от базовой аппаратной платформы а также компилятор. Например, в 64-битной системе Windows, использующей GCC, long
64 бит, но с использованием компилятора Visual C ++ long
«только» 32 бита.
Узнайте больше о целочисленные типы в этой ссылке.
очевидно long
64 бит в вашей системе.
Стандарт C определяет минимальные пределы для целочисленных типов. Это означает, что, например, LONG_MAX должен быть по крайней мере 2 147 483 647
, но это может быть больше.
Как примечание, это ошибка: (unsigned)ULONG_MAX
, Должен быть без знака долго.
Одна интересная любопытная вещь: обратите внимание, например, что LONG_MIN должен быть как минимум -2 147 483 647
, Но даже в обычной 32-битной системе с двумя комплементами это никогда не имеет такого значения!
Имеет значение -2 147 483 648
, Это сделано намеренно, чтобы позволить кому-то дополнить и подписать & системы величин.
Это то, что он говорит.
Minimum Acceptable Value: +2 147 483 647
«Минимально приемлемое значение» для LONG_MAX
в том, что. Ваша ценность для LONG_MAX
(потому что ваша система 64-битная) выше.
Так что проблем нет.