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.