Přetypování
Author
Albert FloresPřetypování je v informatice operace znamenající převedení jednoho datového typu na jiný.
Implicitní a explicitní přetypování
Implicitní (automatické - koerce)
Toto přetypování se provede automaticky pokud se původní datový typ "vejde" do datového typu cíleného objektu nebo převodem nedojde ke ztrátě informace. Toto nastává například pokud jsou v jedné aritmetické operaci přítomny operandy různých typů. +more V této situaci se operand s nižší prioritou konvertuje na operand s prioritou vyšší (nižší rozsah→vyšší rozsah).
příklad pro jazyk C:
int a = 3; double b = 2.123; double c; c = a + b; // a se převede na double hodnotu 3.000
int |
---|
unsigned int |
long |
unsigned long |
float |
double |
long double |
Explicitní (vynucené)
Vynucené přetypování se použije tam, kde není implicitní převod možný. Nastává zde problém se smysluplností těchto převodů a zároveň je třeba dát pozor na ztrátu informace, ke které při této konverzi dochází.
příklad pro jazyk C:
double a = 5.3; int b; b = (int)a; // do proměnné b se uloží oříznuté a, tj. 5
Při explicitním přetypování je třeba dbát zřetel na to, aby cílený typ dokázal pojmout informaci převáděného typu. V tom případě bude výsledkem nedefinovaná hodnota.
char y = 'd'; int a = 256; y = (char) a;
C/C++
Přetypování v C/C++ se provádí tak, že se před výraz napíše do závorek typ, na který chceme přetypovat.
int a = 60, b = 7; float c, d; char ch = 'x';
c = a / b; d = (float) a / b; printf("Celočíselný výsledek: %+4.3f\n", c); printf("Racionalni deleni: %+4.3f\n", d); printf("ASCII kod znaku %c je %i\n", ch, (int) ch);
V C++ se pro přetypování ukazatelů používají operátory static_cast, dynamic_cast a reinterpret_cast.
A *x = new B; // třída A je předek třídy B B *y = new B; A *z = new A; B *p = static_cast(x); B *q = static_cast(z); // riskantní přetypování na potomka. B *r = dynamic_cast(z); // provede se kontrola a r bude nulové. +more int yi = reinterpret_cast(y);.
PHP
PHP explicitně nepoužívá deklarování typu proměnně. Její typ se určí tím co se do ní vloží. +more PHP rozlišuje čtyři základní typy proměnných: Integer, Float, Boolean a String. K přetypování slouží příkaz settype, který nenávratně konvertuje proměnnou na jiný typ. Společně s příkazem settype existuje příkaz gettype, který vrací typ proměnné.
Nový → Původní (dolu) | String | Float | Integer | Boolean |
---|---|---|---|---|
String | --- | Začíná-li číslem toto číslo, jinak nula. Když neobsahuje '. +more', 'e', nebo 'E' | Začíná-li číslem toto číslo, jinak nula. Když neobsahuje '. ', 'e', nebo 'E' | "" a "0"=false, ostatní True |
Float | Převede na řetězec | --- | Ořízne se desetinná část | 0. 0=False, ostatní True |
Integer | Převede na řetězec | Převede se beze změny | --- | 0=False, ostatní True |
Boolean | 1" | false=0. 0 true=1. 0 | false=0 true=1 | --- |
Java
U Javy se implicitní přetypování provádí automaticky stejně jako v C.
float a = 25; double b = 13; b = a; //implicitní konverze
Explicitní konverze musí být inicializována programátorem ve zdrojovém kódu, jinak se příkaz vyhodnotí jako chybový.
float a = 6; double b = 4; a = (float)b; //explicitní konverze
Externí odkazy
[url=http://www. sallyx. +moreorg/]www. sallyx. org[/url] * [url=https://web. archive. org/web/20130530004211/http://www. linuxsoft. cz/]www. linuxsoft. cz[/url] * [url=http://php. net/]php. net[/url] * [url=http://physics. ujep. cz/]physics. ujep. cz[/url] * [url=http://vyuka. eparo. cz/]vyuka. eparo. cz[/url].