c++ maximum of number types
Possible Duplicate:
size of int, long, etc
Is `long` guaranteed to be at least 32 bits?
我想找出我的计算机每种数据类型的最大值。代码是:
1 2 3 4 5 6 7 8 | 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; } |
哪些印刷品:
1 2 3 | 2147483647 2147483647 9223372036854775807 |
问题1:为什么
问题2:以上输出来自64位的VS2010。我的C++程序运行为64位吗?
question 1: why int and long are same?
由于各种原因(便利性),机器体系结构支持的整数大小往往是2的幂。大多数现代处理器可以在本地使用8、16、32和64位整数。但是,有五种常用的整数类型:
在大多数16位平台上,
int 和short 都是16位的。在大多数32位平台上,
int 和long 都是32位的。在大多数64位平台上,
long 和long long 都是64位的。有一个例外…
question 2: above output is from VS2010 on 64bit. Is my c++ program running as 64bit?
无法从这些数据中分辨出来。Windows是一个平台,其中
它们的输出相同,因为在Visual Studio中,
因为在Visual Studio上,
根据C++标准,LING至少需要和int一样大。这意味着LUN也可以与int相同大小,这意味着MIN和Max对于相同类型(签名或无符号)的长和int可以是相等的。
更多信息(不仅仅是关于long和int,还有其他类型)请访问:https://stackoverflow.com/a/271132/13760
下面是一些更有趣的阅读:long是否保证至少32位?
就问题2而言,您需要检查项目设置,看看您是否正在构建一个win32或x64可执行文件。
给定类型的最大值取决于编译器。C++标准没有规定任何长的必须是特定位数的比特等。
但是,声明是:
1 | 1 = sizeof(char)<=sizeof(short)<=sizeof(int)<=sizeof(long)<=sizeof(long long) |
如果您要使用一个特定大小的整数,我建议包括"inttypes.h"和使用int t、int16_t、int32_t、int64_t等…