я видел в /usr/include/limits.h, какСделайте длинный длинный и длинный одинаковый диапазон в C в 64-битной машине?
/* Minimum and maximum values a `signed long int' can hold. */
if __WORDSIZE == 64
define LONG_MAX 9223372036854775807L
else
define LONG_MAX 2147483647L
endif
define LONG_MIN (-LONG_MAX - 1L)
/* Maximum value an `unsigned long int' can hold. (Minimum is 0.) */
if __WORDSIZE == 64
define ULONG_MAX 18446744073709551615UL
else
define ULONG_MAX 4294967295UL
endif
ifdef __USE_ISOC99
/* Minimum and maximum values a `signed long long int' can hold. */
define LLONG_MAX 9223372036854775807LL
define LLONG_MIN (-LLONG_MAX - 1LL)
/* Maximum value an `unsigned long long int' can hold. (Minimum is 0.) */
define ULLONG_MAX 18446744073709551615ULL
Так unsigned long long int
и unsigned long int
, кажется, имеют одинаковую максимальную величину 18446744073709551615 ...
Означает ли это, что long long
означает то же самое, как long
в этом машина? Если да, то почему у нас есть отдельный спецификатор long long
?
От чтения книг С, я ожидал, что long long
будет в два раза размером long
. Я что-то не так? (. Но да, я согласен со стандартами, которые int >= short int
, long >= int
, но это трудно переварить long long >= long
)
«так значит, что это означает, что long long означает то же самое, что и на этом устройстве. так почему же у нас есть отдельный длинный длинный спецификатор? »Mmmmh, потому что ваша машина не единственная машина на земле? – mathieu
hmm .. Я думаю, что это будет одинаково для всех 64-разрядных машин Linux (может быть разным в окнах) ... проверьте ваш тоже? –
См. [Что такое размер бит 'long' в 64-битной Windows?] (http: // stackoverflow.com/questions/384502/what-is-the-bit-size-of-long-on-64-bit-windows) На таких машинах 'long long' больше, чем' long'. На вашей машине два типа имеют одинаковый размер. Оба они полностью верны - привыкайте к этому. –