可能重复:
size of int, long, etc
Is `long` guaranteed to be at least 32 bits?
我想找出我的计算机的每种数据类型的最大值。代码是:
int main() {
using namespace std;
cout << numeric_limits<int>::max() << endl;
cout << numeric_limits<long>::max() << endl;
cout << numeric_limits<long long>::max() << endl;
return 0;
}
打印:
2147483647
2147483647
9223372036854775807
问题1:为什么int
和long
相同?
问题2:上面的输出来自64位的VS2010。我的c ++程序是否以64位运行?
答案 0 :(得分:5)
问题1:为什么int和long是一样的?
由于各种原因(方便),机器架构支持的整数大小往往是2的幂。大多数现代处理器本身可以使用8,16,32和64位整数。但是,有五种常用的整数类型:char
,short
,int
,long
和long long
。所以其中两个必须具有相同的尺寸。
在大多数16位平台上,int
和short
都是16位。
在大多数32位平台上,int
和long
都是32位。
在大多数64位平台上,long
和long long
都是64位。有一个例外...
问题2:上面的输出来自64位的VS2010。我的c ++程序是否以64位运行?
无法从这些数据中得知。 Windows是long
和int
对于32位和64位程序具有相同大小的平台。
答案 1 :(得分:2)
它们输出相同,因为使用Visual Studio,int
和long
都是带符号的32位整数。无论您是构建64位还是32位二进制文件(Windows 64位都遵循LLP64 model)
因为int
和long
的大小在visual studio上的32位和64位之间没有变化,所以无法分辨出你从数据中获取的数据是什么提供
答案 2 :(得分:0)
给定类型的最大值取决于编译器。 C ++标准没有说明长期必须是特定数量的比特等等。
然而,状态是什么:
1 = sizeof(char)<=sizeof(short)<=sizeof(int)<=sizeof(long)<=sizeof(long long)
如果你想使用特定大小的整数,我建议包括“inttypes.h”并使用int_8t,int16_t,int32_t,int64_t等...
答案 3 :(得分:0)
根据C ++标准,长期需要至少与int一样大。这意味着long也可以与int的大小相同,这意味着long和相同类型的int(有符号或无符号)的min和max可以相等。
更多信息(不只是关于long和int,还有其他类型):https://stackoverflow.com/a/271132/13760
以下是一些更有趣的阅读:Is `long` guaranteed to be at least 32 bits?
就问题2而言,您需要检查项目设置,看看您是否构建了Win32或x64可执行文件。