Come funziona la sintassi long long quando int int non in C ++?

3

Mi stavo chiedendo se per lungo tempo si specifichi un singolo tipo di dati allora perché non cose come int int funzionano? Intendevo ovviamente che non è un tipo di dati, ma c'è un lungo tipo di dati. Essenzialmente quello che sto chiedendo è:

int a = 0; //okay
long b = 0; //still fine
long long c = 0; //really long number but its okay....
int int d = 0; //error

perché?

    
posta ROSBOSS 05.05.2016 - 08:19
fonte

2 risposte

8

La differenza tra long long e int int è che long modifica un tipo, piuttosto che essere un tipo stesso. long è in realtà una scorciatoia per long int e long long una abbreviazione per long long int .

Più specificamente int è un tipo specificatore , proprio come char o bool . long è un tipo modificatore . Altri modificatori di tipo sono unsigned e signed e short .

Se uno dei modificatori è mancante, il tipo tornerà al valore predefinito. Per esempio. se non c'è signed o unsigned allora il tipo sarà firmato. Se non c'è short o long la dimensione predefinita dipende dal compilatore e dall'architettura.

Dai un'occhiata a questa tabella su Wikipedia per un elenco completo di come possono essere diversi specificatori di tipi e modificatori combinato.

Modifica

Nelle attuali versioni degli standard C e C ++ long e short sono in realtà degli specificatori di caratteri a pieno titolo. Questo non cambia il modo in cui le cose possono essere combinate però.

    
risposta data 05.05.2016 - 08:29
fonte
2

Puoi specificare un numero intero lungo più lungo di long come long long .

Ma cosa significherebbe specificare un numero intero più intero di int ?

Più precisamente. In C ++ hai tipo int , che è normalmente un numero intero a 32 bit. Poi hai i modificatori short e long che possono essere usati come illustrato dal seguente esempio:

#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    cout << "short int:     " << sizeof(short int) << endl;
    cout << "short:         " << sizeof(short) << endl;
    cout << "int:           " << sizeof(int) << endl;
    cout << "long int:      " << sizeof(long int) << endl;
    cout << "long:          " << sizeof(long) << endl;
    cout << "long long int: " << sizeof(long long int) << endl;
    cout << "long long:     " << sizeof(long long) << endl;
}

Sulla mia macchina Linux, in esecuzione g++ 4.7.2 , questo dà:

short int:     2
short:         2
int:           4
long int:      8
long:          8
long long int: 8
long long:     8

  • int è un numero intero con segno a 32 bit
  • short int (abbreviato, short ) è un intero con segno a 16 bit
  • long int (abbreviato, long ) è un intero con segno a 64 bit
  • long long int (abbreviato, long long ) è ancora un intero con segno a 64 bit sulla mia architettura / compilatore, ma è nella lingua per consentire un tipo intero più lungo (ad es. 128 bit) su architetture / compilatori diversi.

Quindi, come Will ha spiegato: in questo contesto, long è un modificatore che può essere applicato due volte mentre int non è un modificatore.

    
risposta data 05.05.2016 - 08:42
fonte

Leggi altre domande sui tag