为什么long和long long的最大值产生相同的输出?

at-*_*ard 0 c++ c++builder visual-c++ c++11 c++14

#include <iostream>
using namespace std;
#include <climits>

int main () {

    int n_int = INT_MAX;
    short n_short = SHRT_MAX;
    long n_long = LONG_MAX;
    long long n_llong = LLONG_MAX;

    cout << "int is " << sizeof (int) << " bytes." << endl;
    cout << "short is " << sizeof n_short << " bytes." << endl;
    cout << "long is " << sizeof n_long << " bytes." << endl;
    cout << "long long is " << sizeof n_llong << " bytes." << endl;
    cout << endl;

    cout << "Maximum values:" << endl;
    cout << "int:   " << n_int << endl;
    cout << "short: " << n_short << endl;
    cout << "long:  " << n_long << endl;
    cout << "llong: " << n_llong << endl << endl;
    //cout << endl;

    cout << "Minimum int value = " << INT_MIN << endl;
    cout << "Maximum int value = " << INT_MAX << endl;
    cout << "Bits per byte = " << CHAR_BIT << endl;

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

输出: 长和长的长变量产生完全相同的最大值,我不知道为什么.long值应该输出最大值2147483647.

int is 4 bytes.
short is 2 bytes.
long is 8 bytes.
long long is 8 bytes.
Maximum values:
int:   2147483647
short: 32767
long:  9223372036854775807
llong: 9223372036854775807
Minimum int value = -2147483648
Maximum int value = 2147483647
Bits per byte = 8
Run Code Online (Sandbox Code Playgroud)

Bri*_*ian 9

long不保证是32位长; 它只需要至少 32位长.您的实现已定义long为64位.请注意,即使longlong long对您的实现相同的范围内,但它们是截然不同的类型.

  • Longs不需要至少32位.唯一具有保证大小的内置类型是char,而sizeof(char)将始终为1.这并不意味着1个字节.它意味着1个单位(无论该机器上有什么字符.)唯一的保证是多头作为整数最小,而长多头最长也是最长的. (2认同)
  • @ChrisUzdavinis"sizeof"的结果是实现定义的事实并没有使"long"必须能够表示从-2147483647到+2147483647的每个值的要求无效.从数学上讲,这意味着它至少有32位长.你引用的注释完全无关紧要. (2认同)