为什么数据类型长支持最大数量等于long long?

Min*_*nja 2 c++

所以我做了一些测试用新的数据类型很长很长,当我偶然发现了一个小"问题"(例如在C++来底漆第6版).我正在使用climbits库来告诉我支持的最大数量,两者都出现在9223372036854775807.这怎么可能?

#include <iostream> 
#include <climits>

int main()
{
    std::cout << "int size is " << sizeof(int) << " bytes." << std::endl;
    std::cout << "short size is " << sizeof(short) << " bytes." << std::endl;
    std::cout << "long size is " << sizeof(long) << " bytes." << std::endl;
    std::cout << "long long size is " << sizeof(long long) << " bytes." << std::endl;

    std::cout << "Maximum values: " << std::endl;
    std::cout << "int: " << INT_MAX << std::endl;
    std::cout << "short: " << SHRT_MAX << std::endl;
    std::cout << "long: " << LONG_MAX << std::endl;
    std::cout << "long long: " << LLONG_MAX << std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

jua*_*nza 5

这是可能的,因为,该标准规定long必须是至少一样大int并且long long必须是至少在大long( 至少 64在C++ 11位).所以没有矛盾.

关于long longC++ 11,请参阅此相关问题.

由于您标记了问题C++,请记住,limits标题中给出了给定类型的数字限制,并且C99中标准的内容(即内容中<climits>)不一定是C++中的标准,即它可能是实现定义的.long long(或更明确地说,它的值范围)中的位数是标准的一个例子C,只是在C++ 11中成为标准.


Ric*_*ond 5

因为您在64位计算机上运行,​​其中编译器将"long"和"long long"实现为64位整数.

如果您要为32位计算机编译它,您会发现有所不同.例如:

$ g++ -m32 size.cpp
$ ./a.out 
int size is 4 bytes.
short size is 2 bytes.
long size is 4 bytes.
long long size is 8 bytes.
Maximum values: 
int: 2147483647
short: 32767
long: 2147483647
long long: 9223372036854775807
Run Code Online (Sandbox Code Playgroud)