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

    [c++ ] Dati ANSI, e conversione di tipo negli assegnamenti

    Allora, stò studiando il c++, ma non sono ancora riuscito a capire un cosa. Vorrei cercare di aquisirla una volta per tutte:

    1) si usano per definire le variabili, ma in che modo? che differenza c'è tra di loro?

    - char
    - unsigned char
    - signed char
    - int
    - unsigned int
    - signed int
    - short int
    - unsigned short int
    - signed short int
    - long int
    - signed long int
    - unsigned long int
    - float
    - double
    - long double

    so perfettamente quanto valgono [in bit], ma non so quando devo usare l'uno o l'altro per definire le variabili.

    2) piccolo es:

    int x;
    char ch;
    float f;

    void func(void)
    {
    ch = x; // riga 1
    x = f; // riga 2
    f = ch; // riga 3
    f = x; // riga 4
    }

    questo è l'esempio del mio libro, per spiegfare la conversione di tipo negli assegnamenti. Il problema è che non ho capito nulla di questo argomento.

    Se qualcuno fosse così gentile da volermi aiutare....
    Se non fosse nato il c++, il mio intelletto sarebbe ancora oscuro a molti...

  2. #2
    Mi sa che sei di travertino... Ti ho scritto post dettagliatissimi su questa cosa e milioni di volte... BAH.

    In linea di massima è a tua DISCREZIONE, non ci sono regole ferree (a parte la capienza della variabile, ma per iniziare non ti serve saperlo, fidati!!) che ti impongono di usare un tipo invece che un altro, almeno nell'ambito di tipi che hanno lo stesso uso (tipi interi, tipi con la virgola).

    Cmq il modificatore 'signed' è sottinteso, quindi ti elenco alcuni sinonimi:

    char = signed char
    short int = signed short int
    long int = signed long int
    int = signed int

    signed short int = signed short = short
    signed long int = signed long = signed (in generale)
    signed int = signed long int (in generale)

    unsigned short int = unsigned short
    unsigned long int = unsigned long = unsigned (in generale)
    unsigned int = unsigned long int (in generale)

    In ogni caso, non è assolutamente IMPORTANTE capire quando sia meglio usare che so... 'char' invece di 'int', o 'float' invece di 'double'. FREGATENE! Passa avanti, e per ora usa:

    - 'char' per i caratteri e per le stringhe;
    - 'int' per i numeri interi;
    - 'double' per i numeri con virgola.

    Per il momento non ti interessa sapere in dettaglio tutto su ogni tipo, quindi cambia argomento, altrimenti non ti muovi più e accanni tutto. E' un consiglio da uno che ci è passato, abbi fede! :quipy:

    P.S.: rivediti anche la risposta che ti ho dato sul topic "const e volatile".

    Ciao.

  3. #3
    ok, ho capto, ma potresti spiegarmi la conversione di tipo negli assegnamenti, realtiva al mio esempio?
    Se non fosse nato il c++, il mio intelletto sarebbe ancora oscuro a molti...

  4. #4
    Le conversioni "forzate" in C/C++ prendono il nome di cast. Nelle righe che hai postato probabilmente il compilatore ti darà dei warnings perché i cast non sono stati espressi esplicitamente.

    codice:
    ch = x; // se x è un valore fra -128 e 127 (compresi), ch memorizza il valore giusto di x; in caso contrario, ne memorizza il byte basso, con conseguente perdita di informazioni sul dato
    
    x = 100;
    ch = x; // nessun problema
    
    x = -40;
    ch = x; // nessun problema
    
    x = 65535; // uso questo numero perché è più facile da convertire
    ch = x; // il numero è troppo grande per stare in un char; 65535 = 0x0000FFFF (esadecimale, considero l'int a 32-bit, 4 bytes = 4 char), in ch viene memorizzato il byte più basso, che in questo caso vale 0xFF, cioè 255
    codice:
    x = f; // non ricordo bene come i float memorizzano il proprio valore, ma siccome spesso contengono numeri con la virgola, un cast da float a int porta la perdita della parte decimale
    
    f = 10;
    x = f; // nessun problema
    
    f = 10.345;
    x = f; // x memorizza solo 10
    La terza riga non causa perdite, perché float è sicuramente più grande di char; per la quarta non sono sicuro, ma in linea di massima vale lo stesso discorso.

    In generale devi solo sapere (ed è una cosa ovvia) che le perdite di dati possono accadere solo se si passa da un tipo grande ad un tipo più piccolo.

    Puntiglioso? Sì, forse giusto un po'! :tongue:

    Ciao.

  5. #5
    allora, devo darti atto di una grande maestria nella programmazionee [il tuo secondo nome sarà mica azzecca garbugli...? :gren:]. Cmq, in pratica:

    se converto valori piccoli con valori grandi non succede nulla, ma non è vero il contrario. Ora, l'unico problema è: quali sono i valori piccoli e quelli grandi? [intendo: int, char, float, double].
    Se non fosse nato il c++, il mio intelletto sarebbe ancora oscuro a molti...

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 © 2025 vBulletin Solutions, Inc. All rights reserved.