C++ long可能不存储整数?
在我的作业中,它说“不要添加long int或long long-private成员来完成此任务,因为不能保证两者都可以存储比int更大的数字。”我知道int的最大值为2^31-1,long long的最大值为2^63-1。有人能给我举个例子说明为什么这个句子是正确的吗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
能存储更多的数字。它至少和它一样大,但也可以是一样的
我知道int的最大值为2^31-1,long-long的最大值为2^63-1
对于某些平台和编译器,这可能是正确的,但并不总是相同的。C++也不能保证.
3.9.1基本类型[基本.基本]
2) 有五种标准的带符号整数类型:“带符号字符”
”,
“short int
”、“int
”、“long int
”和“long long int
”。在这个列表中,,
每种类型提供的存储空间至少与其前面的类型相同
名单。[……](强调地雷)
C标准规定了两个相关标准:
ISU/IEC 9899:2011,§6.2.5 Types,^8:对于具有相同符号性和不同整数转换秩的任何两个整数类型,间接规定了这一点 (见6.3.1.1),整数转换秩较小的类型的值范围为a 其他类型的值的子范围sizeof(char)≤ sizeof(短)≤ sizeof(内部)≤ sizeof(长)≤ sizeof(长)≤ sizeof(uintmax\u t)
- 类型最大值的最小允许值(ISO/IEC 9899:2011,§5.2.4.2.1整数类型的大小
):
≥ 127//27-1SCHAR_MAX
≥ 32767//215-1SHRT\u MAX
≥ 32767//215-1INT\u MAX
≥ 2147483647//231-1LONG\u MAX
≥ 9223372036854775807//263-1LLONG_MAX
报价在形式上是正确的;可以设计出
long
存储范围不大于int
的系统-事实上,在大多数32位系统(我所知道的所有系统)上都是如此,在Windows 64上也是如此。它不太可能是准确的w.r.tlong
;我知道没有一个系统是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的引用。请参见编辑。常见的组合甚至有名称,正如您之前的回答所述:我确实知道名称;我决定不在这里使用它们,尽管这可能是个错误。