В моем задании написано: «Не добавляйте длинных int или long long private членов для достижения этой цели, поскольку нет гарантии, что любой из них действительно может хранить большие числа, чем int». Я знаю, что int имеет максимум 2 ^ 31-1, а long long имеет максимум 2 ^ 63-1. Так может ли кто-нибудь дать мне пример, почему данное предложение верно?
Заранее спасибо!
Это означает именно то, что говорится. Там нет никакой гарантии, что long long
может хранить больше номеров, чем int
, Это по крайней мере, такой большой, но это может быть то же самое.
Я знаю, что int имеет максимум 2 ^ 31-1, а long long имеет максимум 2 ^ 63-1
Это может быть верно для некоторой платформы, с некоторым компилятором, но это не всегда то же самое. С ++ тоже не гарантирует.
2) Существует пять стандартных целочисленных типов со знаком: «
signed char
»,
«short int
»,«int
»,«long int
«, а также «long long int
». В этом списке
каждый тип обеспечивает как минимум столько же памяти, сколько предшествующий ему в
список. […] (выделение мое)
Стандарт C определяет два соответствующих критерия:
sizeof(char) ≤ sizeof(short) ≤ sizeof(int) ≤ sizeof(long) ≤ sizeof(long long) ≤ sizeof(uintmax_t)
Это косвенно указано в ISU / IEC 9899: 2011, §6.2.5 Типы, ¶8: Для любых двух целочисленных типов с одинаковой подписью и разным целым числом
(см. 6.3.1.1), диапазон значений типа с меньшим целочисленным рангом преобразования
поддиапазон значений другого типа.
Минимально допустимое значение для максимумов типов (ISO / IEC 9899: 2011, §5.2.4.2.1 Размеры целочисленных типов <limits.h>
):
SCHAR_MAX
≥ 127 // 27-1SHRT_MAX
≥ 32,767 // 215-1INT_MAX
≥ 32,767 // 215-1LONG_MAX
≥ 2 147 483 647 // 231-1LLONG_MAX
≥ 9,223,372,036,854,775,807 // 263-1Цитата формально верна; можно разработать системы, в которых long
не хранит больший диапазон, чем int
— действительно, это относится к большинству 32-битных систем (все, что я знаю), а также к Windows 64. С меньшей вероятностью, он будет точным с w.r.t. long long
; Я не знаю ни одной системы, где sizeof(int) == sizeof(long long)
(и из-за указанного неравенства sizeof(int) == sizeof(long)
). На большинстве 64-битных систем Unix sizeof(int) == 4
, sizeof(long) == 8
, а также sizeof(long long) == 8
; в Windows 64, sizeof(long) == 4
и только long long
(или же __int64
) является 64-битным типом.