在我的作业中,它说
请勿添加
或long int
私人成员来完成此操作,因为不能保证它们实际上可以存储比long long
更大的数字。int
我知道
int
的最大值为 231-1,而 long long
的最大值为 263-1。有人可以举个例子来解释为什么给定的句子是正确的吗?
它的意思正是它所说的。无法保证
long long
可以比 int
存储更多的数字。它至少一样大,但也可以相同。
我知道int的最大值为2^31-1,long long的最大值为2^63-1
对于某些平台和某些编译器来说这可能是正确的,但并不总是相同的。 C++ 也不保证。
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),整数转换等级较小的类型的取值范围是a 另一种类型的值的子范围。
类型最大值的最小允许值(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)
)。在大多数 Unix 64 位系统上,sizeof(int) == 4
、sizeof(long) == 8
和 sizeof(long long) == 8
;在 Windows 64 上,sizeof(long) == 4
并且只有 long long
(或 __int64
)是 64 位类型。