Domanda Differenza tra i tipi di dati long e int [duplicato]


Questa domanda ha già una risposta qui:

Considerando che le seguenti dichiarazioni ritornano 4, qual è la differenza tra il int e long tipi in C ++?

sizeof(int)
sizeof(long)

44
2018-05-22 22:17


origine


risposte:


A partire dal Questo riferimento:

Inizialmente, int era inteso per essere   la dimensione della parola "naturale" del   processore. Molti processori moderni possono   gestire diversi formati di parole con lo stesso numero   facilità.

Inoltre, questo bit:

Su molti (ma non tutti) C e C ++   implementazioni, una lunga è più grande di   un int. Il desktop più popolare di oggi   piattaforme, come Windows e Linux,   eseguire principalmente su processori a 32 bit e   la maggior parte dei compilatori per queste piattaforme usano   un int a 32 bit che ha le stesse dimensioni   e rappresentazione come lunga.


51
2018-05-22 22:20



La garanzia che lo standard ti dà andare in questo modo:

1 == sizeof(char) <= sizeof(short) <= sizeof (int) <= sizeof(long) <= sizeof(long long)

Quindi è perfettamente valido per sizeof (int) e sizeof (long) per essere uguali, e molte piattaforme scelgono di seguire questo approccio. Troverete alcune piattaforme dove int è a 32 bit, long è 64 bit e long long è 128 bit, ma sembra molto comune per sizeof (long) essere 4.

(Nota che long long è riconosciuto in C dalla C99 in poi, ma è stato normalmente implementato come un'estensione in C ++ prima di C ++ 11).


40
2018-05-22 22:59



Sei su un computer a 32 bit o su un computer Windows a 64 bit. Sulla mia macchina a 64 bit (con un O / S derivato Unix, non Windows), sizeof(int) == 4, ma sizeof(long) == 8.

Sono tipi diversi - a volte le stesse dimensioni l'uno dell'altro, a volte no.

(Nei vecchi tempi, sizeof(int) == 2 e sizeof(long) == 4 - anche se quello poteva essere il giorno prima che il C ++ esistesse, vieni a pensarci. Eppure, tecnicamente, è una configurazione legittima, anche se insolita al di fuori dello spazio incorporato, e molto probabilmente insolita anche nello spazio incorporato.)


17
2018-05-22 22:21



Sulle piattaforme in cui entrambi hanno le stesse dimensioni la risposta è nulla. Entrambi rappresentano valori firmati a 4 byte.

Tuttavia non puoi dipendere da ciò che è vero. Le dimensioni di long e int non sono definite in modo definitivo dallo standard. È possibile per i compilatori fornire tipi di dimensioni diverse e quindi interrompere questa ipotesi.


4
2018-05-22 22:18



Il lungo deve essere almeno della stessa dimensione di un int, e possibilmente, ma non necessariamente, di più.

Sui sistemi a 32 bit comuni, sia int che long sono 4-byte / 32-bit, e questo è valido secondo le specifiche C ++.

Su altri sistemi, sia int che long long possono essere di dimensioni diverse. Ero abituato a lavorare su una piattaforma dove int era 2 byte, e lungo era 4 byte.


3
2018-05-22 22:23



Una best practice tipica non utilizza direttamente long / int / short. Invece, in base alle specifiche dei compilatori e del sistema operativo, avvolgili in un file di intestazione per assicurarti che contengano esattamente la quantità di bit che desideri. Quindi utilizzare int8 / int16 / int32 anziché long / int / short. Ad esempio, su Linux a 32 bit, potresti definire un'intestazione come questa

typedef char int8;
typedef short int16;
typedef int int32;
typedef unsigned int uint32;

2
2018-05-28 01:44