在我的作业中,它说“不要添加long int或long long私有成员来实现这一点,因为不能保证任何一个实际上可以存储比int更大的数字。”我知道int的最大值为2 ^ 31-1,long long的最大值为2 ^ 63-1。那么有人能给我一个例子,为什么给定的句子是真的吗?
提前致谢!
答案 0 :(得分:7)
这正是它所说的。无法保证long long
可以存储的数字多于int
。它至少和一样,但它可以是相同的。
我知道int的最大值为2 ^ 31-1,long long的最大值为2 ^ 63-1
对于某些平台,对于某些编译器,这可能是正确的,但它并不总是相同的。 C ++也不保证。
2)有五种标准的有符号整数类型:“
signed char
”, “short int
”,“int
”,“long int
”和“long long int
”。在此列表中, 每种类型至少提供与其前面相同的存储空间 列表。 [...](强调我的)
答案 1 :(得分:2)
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),具有较小整数转换等级的类型的值范围是a 另一种类型的值的子范围。
类型最大值的最小允许值(ISO / IEC 9899:2011,§5.2.4.2.1整数类型的大小<limits.h>
):
SCHAR_MAX
≥127// 2 7 -1 SHRT_MAX
≥32,767// 2 15 -1 INT_MAX
≥32,767// 2 15 -1 LONG_MAX
≥2,147,483,647// 2 31 -1 LLONG_MAX
≥9,223,372,036,854,775,807// 2 63 -1 报价正式无误;有可能设计long
不存储比int
更大范围的系统 - 事实上,在大多数32位系统(我所知道的所有系统)中都是这种情况,并且也是如此Windows 64. long long
不太可能是准确的。sizeof(int) == sizeof(long long)
;我知道没有系统sizeof(int) == sizeof(long)
(并且由于引用的不等式sizeof(int) == 4
)。在大多数Unix 64位系统上,sizeof(long) == 8
,sizeof(long long) == 8
和sizeof(long) == 4
;在Windows 64上,long long
且只有__int64
(或{{1}})是64位类型。