Obsah

Konverze

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. automatické konverze konverze int na long 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.

konverze long na int 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.