C++ long可能不存储整数?

C++ long可能不存储整数?,c++,C++,在我的作业中,它说“不要添加long int或long long-private成员来完成此任务,因为不能保证两者都可以存储比int更大的数字。”我知道int的最大值为2^31-1,long long的最大值为2^63-1。有人能给我举个例子说明为什么这个句子是正确的吗 提前谢谢 它的意思正是它所说的。不能保证long比int能存储更多的数字。它至少和它一样大,但也可以是一样的 我知道int的最大值为2^31-1,long-long的最大值为2^63-1 对于某些平台和编译器,这可能是正确的,但

在我的作业中,它说“不要添加long int或long long-private成员来完成此任务,因为不能保证两者都可以存储比int更大的数字。”我知道int的最大值为2^31-1,long long的最大值为2^63-1。有人能给我举个例子说明为什么这个句子是正确的吗


提前谢谢

它的意思正是它所说的。不能保证
long
int
能存储更多的数字。它至少和它一样大,但也可以是一样的

我知道int的最大值为2^31-1,long-long的最大值为2^63-1

对于某些平台和编译器,这可能是正确的,但并不总是相同的。C++也不能保证.

3.9.1基本类型[基本.基本] 2) 有五种标准的带符号整数类型:“
带符号字符”
”, “
short int
”、“
int
”、“
long int
”和“
long long int
”。在这个列表中,, 每种类型提供的存储空间至少与其前面的类型相同 名单。[……](强调地雷)


C标准规定了两个相关标准:

  • sizeof(char)≤ sizeof(短)≤ sizeof(内部)≤ sizeof(长)≤ sizeof(长)≤ sizeof(uintmax\u t)

    ISU/IEC 9899:2011,§6.2.5 Types,^8:对于具有相同符号性和不同整数转换秩的任何两个整数类型,间接规定了这一点 (见6.3.1.1),整数转换秩较小的类型的值范围为a 其他类型的值的子范围

  • 类型最大值的最小允许值(ISO/IEC 9899:2011,§5.2.4.2.1整数类型的大小
    ):

    • SCHAR_MAX
      ≥ 127//27-1
    • SHRT\u MAX
      ≥ 32767//215-1
    • INT\u MAX
      ≥ 32767//215-1
    • LONG\u MAX
      ≥ 2147483647//231-1
    • LLONG_MAX
      ≥ 9223372036854775807//263-1

报价在形式上是正确的;可以设计出
long
存储范围不大于
int
的系统-事实上,在大多数32位系统(我所知道的所有系统)上都是如此,在Windows 64上也是如此。它不太可能是准确的w.r.t
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
(或
\uu int64
)是64位类型。

实际上它是
(2**32)-1
(2**64)-1
。如果需要大小保证,请使用cstdint中定义的类型。您不会冒险依赖于实现定义的行为,并且在阅读代码时更容易理解代码的含义@JoachimPileborg:对于无符号整数,您的限制是正确的;海报上的是有符号整数。但我认为long long可以存储–9223372036854775808到9223372036854775范围内的任何值,807@user44322您对此有何参考?我认为在C++11中,
long
肯定会更大或更大。@chris“至少”-添加了引用。@user44322标准引用先于MS的引用。请参见编辑。常见的组合甚至有名称,正如您之前的回答所述:我确实知道名称;我决定不在这里使用它们,尽管这可能是个错误。