Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    int, short int, long int

    Salve, non ho capito che differenza c'è tra int, long int, short int e tra float e double, potreste spiegarmelo?

    grazie!

  2. #2
    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.

  3. #3
    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?

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    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)

  5. #5
    Originariamente 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?
    sono uguali in alcuni casi ma non in tutti, come ti hanno spiegato prima
    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

  6. #6
    Originariamente inviato da Celebron
    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:
    • 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.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.