Konverze (přetypování) je převod
hodnoty na hodnotu jiného typu. Např. převod hodnoty typu
double na hodnotu typu
int. Některé konverze se provádějí
automaticky, např. z typu int na typu
double, jiné si musíme vyžádat, např.
z typu long na typ
int. Automatické konverze není nutné
zapisovat:
int maleX = 1000;
long velkeX = maleX; // automatická konverze z int na long
Je-li třeba konverzi předepsat, uvádíme cílový typ v závorkách před
konvertovanou hodnotou. Např. konverzi
z double na int
zapíšeme takto:
double d1 = 5.85;
int i1 = (int) d1;
Výsledkem této konverze bude hodnota, která je v zápise původního
čísla před desetinnou tečkou (pro nezáporné hodnoty je to celá část
čísla). Tj. v proměnné i1 bude hodnota 5.
double d2 = -4.99;
int i2 = (int) d2;
V proměnné i2 bude hodnota −4.
Připomeňme, že to není celá část čísla, protože celá část čísla
−4.99 je −5.
Konverze můžeme provádět mezi libovolnými dvěma číselnými typy.
Zabírá-li cílový typ více bajtů než zdrojový, není třeba konverzi
předepisovat. Např. konverze z byte na
int se provede automaticky, protože
byte zabírá pouze 1 bajt, zatímco
int zabírá 4 bajty. Konverze probíhá tak,
že se k hodnotě typu byte přidají tři
bajty, které mají hodnotu buď 0, je-li původní hodnota nezáporná,
nebo ff16, je-li původní hodnota záporná. Výsledná
hodnota tedy bude stejná jako původní, bude však uložena na více
bajtech.
Mezi automatické konverze patří také konverze
z char na int.
Provádí se tak, že se k hodnotě typu char
doplní dva nulové bajty. Výsledná hodnota je tedy vždy nezáporná.
Proto se někdy typ char označuje jako
neznaménkový celočíselný typ.
Pokud cílový typ zabírá méně bajtů než zdrojový, musíme konverzi
předepsat. Příkladem takové konverze je konverze
z int na byte.
Jejím výsledkem je hodnota nejnižšího bajtu původní hodnoty.
Zbylé tři bajty se při konverzi nepoužijí.
Úloha 1
Doplňte kód tak, aby proměnná c
obsahovala druhé písmeno anglické abecedy.
Úloha 2
Určete hodnoty proměnných x,
y a z.
Úloha 3
Určete, co se vytiskne.
Úloha 4
Doplňte chybějící typ proměnné viditelny.
Úloha 5
Doplňte křížovku.
Otázky a odpovědi
Studentka:
Mistře, jak se provádí konverze z long
na double? Typ
long je uložen na 64 bitech, avšak
mantisa u typu double má pouze
52 bitů. Jak se uloží 64-bitové číslo do 52 bitů? Nemůže při
této konverzi dojít ke ztrátě informace?
Java guru:
Jsi bystrá studentka. Někdy skutečně dojde k tomu, že nižší
bity čísla long se do typu
double nevejdou. Vždy se však zachová
informace o řádové velikosti čísla. Stejná situace může nastat
při převodu int na
float (zde má mantisa pouze 23 bitů).
int i = 123456789;
float f = i;
Po provedení druhého přiřazení bude v proměnné
f hodnota 123456792.0f.