Salve, non ho capito che differenza c'è tra int, long int, short int e tra float e double, potreste spiegarmelo?
grazie!
Salve, non ho capito che differenza c'è tra int, long int, short int e tra float e double, potreste spiegarmelo?
grazie!
Hanno range di valori contenibili diversi (e quindi di fatto dimensioni in bit diverse); lo standard C99 garantisce come range minimi (§E ¶1):
short int => [-32767, +32767]
int => [-32767, +32767]
long int => [-2147483647, +2147483647]
ma in generale i limiti possono essere (e in genere sono) maggiori; viene comunque garantito che i range dell'uno siano compresi in quelli degli altri nel seguente ordine:
short int <= int <= long int
Inoltre si richiede che l'int sia l'intero di dimensioni "naturali" per la macchina su cui girerà il codice.
I limiti effettivi sono comunque definiti nell'header <limits.h> (per il C) o in <limits> (per il C++). In genere i limiti usati sulle macchine a 32 bit sono
short int => [-32768, +32767]
int => [-2147483648, +2147483647]
long int => [-2147483648, +2147483647]
Su quelle a 64 le cose variano; su Windows rimangono uguali per questioni di compatibilità, e il tipo che passa a 64 bit è il long long int. Su Linux invece in genere si passa il long a 64 bit.
Per finire, tieni conto che in genere in "short int" e "long int" l'"int" si omette, per cui di solito si scrive semplicemente long e short.
Per quanto concerne i float e i double, il concetto è analogo: i double in genere sono grandi il doppio, per cui c'è più spazio per la mantissa (maggiore precisione) e per l'esponente (si possono rappresentare valori più grandi e più piccoli).
In linea di principio, se non hai particolare esigenze usa gli int per gli interi e i double per i valori in virgola mobile; ottieni così un valore intero dal range adeguato per impieghi "normali" e sicuramente veloce, e valori in virgola mobile in buona precisione senza perdite sensibili in termini di prestazioni.
Amaro C++, il gusto pieno dell'undefined behavior.
ma l'int e lo short int non sono uguali visto che contengono lo stesso range di valori?
il long int si può usare su un processore a 32 bit?
Allora devi stare attento perché int e short int non hanno lo stesso range, hanno un numero di byte di differenza per rappresentare i valori.
Long int in genere non lo si usa insieme (si usa solo long), ma stai attento a cosa vuole dire long per la macchina (come ti dicevano le dimensioni sono platform dependent)
sono uguali in alcuni casi ma non in tutti, come ti hanno spiegato primaOriginariamente inviato da paperino00
ma l'int e lo short int non sono uguali visto che contengono lo stesso range di valori?
il long int si può usare su un processore a 32 bit?
le garanzie che hai sono che short int <= int <= long int
in alcune macchine i tre tipi potrebbero anche avere identico range, in altre potrebbero essere l'uno diverso dall'altro
Giusto per rinforzare il discorso con qualche esempio pratico:Originariamente inviato da Celebron
in alcune macchine i tre tipi potrebbero anche avere identico range, in altre potrebbero essere l'uno diverso dall'altro
- sul processore dell'Arduino (ATmega328) i range dei tipi sono 16 bit per lo short, 16 bit per l'int e 32 bit per il long;
- su Windows a 32 e 64 bit lo short è 16 bit, l'int e il long sono a 32 bit, e il long long è a 64 bit;
- su Linux a 32 bit la situazione è analoga a Windows a 32 bit; su Linux a 64 bit lo short è 16 bit, l'int è a 32 bit e il long è a 64 bit (come il long long).
Nota come in genere il processore è in grado di gestire anche interi più grandi dei suoi "interi nativi": semplicemente sarà più lento a manipolarli (e in genere le operazioni su tali interi non saranno atomiche).
Amaro C++, il gusto pieno dell'undefined behavior.