在我的作业中,它说“不要添加 long int 或 long long 私有成员来完成此操作,因为不能保证两者都可以实际存储比 int 更大的数字。” 我知道 int 的最大值为 2^31-1,long long 的最大值为 2^63-1。那么有人可以给我一个例子,为什么给定的句子是真的?
提前致谢!
在我的作业中,它说“不要添加 long int 或 long long 私有成员来完成此操作,因为不能保证两者都可以实际存储比 int 更大的数字。” 我知道 int 的最大值为 2^31-1,long long 的最大值为 2^63-1。那么有人可以给我一个例子,为什么给定的句子是真的?
提前致谢!
它的意思正是它所说的。不能保证 along long
可以存储比 a 更多的数字int
。它至少一样大,但它可以是一样的。
我知道 int 的最大值为 2^31-1 而 long long 的最大值为 2^63-1
对于某些平台,使用某些编译器,这可能是正确的,但并不总是相同的。C++ 也不保证。
2) 有五种标准有符号整数类型:“<code>signed char”、“<code>short int”、“<code>int”、“<code>long int”和“<code>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 Sizes of integer types <limits.h>
):
SCHAR_MAX
≥ 127 // 2 7 -1SHRT_MAX
≥ 32,767 // 2 15 -1INT_MAX
≥ 32,767 // 2 15 -1LONG_MAX
≥ 2,147,483,647 // 2 31 -1LLONG_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)
)。在大多数 Unix 64 位系统上,sizeof(int) == 4
、sizeof(long) == 8
和sizeof(long long) == 8
; 在 Windows 64 上,sizeof(long) == 4
只有long long
(或__int64
) 是 64 位类型。