Još malo o podacima, operatorima, ...
5. Pretvorba tipova podataka
5.1. Automatska ili implicitna pretvorba tipova podataka
Automatska ili implicitna pretvorba je sastavni dio programskog jezika C i orijentirana je prema višem ili preciznijem tipu podatka (obično, no ne nužno, onom koji zauzima više memorije). To možemo prikazati i ovako:
long double > double > float > long int > unsigned int > int > short/char
Postoji još kombinacija modifikatora i tipova podataka koje ovdje nismo obuhvatili. Tijekom izračunavanja izraza u kojima se nalaze različiti tipovi podataka, najprije se svi svode na isti tip prema ugrađenim pravilima za pretvaranje tipova podataka, a tek tada se provodi izračunavanje.
Pravila za automatsko pretvaranje tipova podataka:
1. Ako su svi operandi tipa int, tada je i rezultat tipa int.
2. Svi podatci char i short pretvaraju se u int.
3. Ako u izrazu postoji operand tipa double, tada se svi podatci pretvaraju u double i rezultat je tipa double.
4. Ako u izrazu postoji operand tipa long, tada se svi podatci pretvaraju u long i rezultat je tipa long.
5. Ako je bilo koji od operanada u izrazu najavljen kao unsigned, svi ostali operandi pretvaraju se u unsigned i rezultat je tipa unsigned.
Primjer
Najavljene su varijable:
int a;float b;
Kojeg će tipa podatka biti rezultat množenja a * b?
Rješenje
Zbog automatske pretvorbe podataka najprije će se varijabla a pretvoriti u realan broj i nakon toga će se provesti množenje. Rezultat će biti tipa float!
Primjer
Uporaba operatora pridruživanja također pokreće automatsko pretvaranje podataka ako su operandi s lijeve i desne strane različitog tipa. Operand na desnoj strani pretvara se u tip operanda s lijeve strane. Pritom se podatci mogu izgubiti ako se pretvorba obavlja iz višeg u niži tip podatka. Primjerice, najavljene su varijable:
int i=5;float j=7.356;
Izrazom j=i; cjelobrojna vrijednost varijable i najprije će se pretvoriti u realnu (5.00), a zatim pridružiti varijabli j (j=5.00). Isto tako, u izrazu i=j; varijabli i pridružit će se cjelobrojna vrijednost varijable j dobivena odbacivanjem decimalnog dijela (i=7).