/* 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
说明符?
从阅读 C 语言书籍上来看,我预期 long long
的大小应该是 long
的两倍。
我错了吗?
(但是我同意标准规定 int >= short int
,long >= int
,但很难理解 long long >= long
。)
long
位大小是多少? 在这样的机器上,long long
比long
更大。在您的机器上,这两种类型的大小相同。两者都是完全有效的 - 习惯就好了。 - Jonathan LefflerCHAR_BIT == 8
,sizeof(short) == 2
,sizeof(int) == 4
,sizeof(long) = 8
,sizeof(long long) == 16
(也称为128位)和sizeof(intmax_t) == 32
(也称为256位)。之后,您将无法使用标准名称来表示不同大小的整数,除非使用数字int64_t
风格的名称。 - Jonathan Leffler