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).