Wiki Markup |
---|
h1. Eksplisiittinen tyypinmuunnos (cast) |
...
* Eksplisiittisessä tyypinmuunnoksessa muuttujan tyyppi muutetaan väliaikaisesti (eli lausekkeen suorituksen ajaksi) muunnoksessa ilmoitetuksi tyypiksi. |
...
* Muunnos tehdään kirjoittamalla muuttujan nimen eteen sulkeisiin lausekkeessa käytettävä tyyppi. h2. |
...
Syntaksi |
...
{code |
} (haluttu_tyyppi)muuttuja; {code} Tyypinmuunnos voidaan tehdä myös välitulokselle: |
...
{code |
} (haluttu_tyyppi)(muuttuja1*muuttuja2); {code} Tässä laskennan {{muuttuja1*muuttuja2}} tulokselle suoritetaan tyypinmuunnos. |
...
Esimerkki
Ajatellaan seuraavaa tilannetta:
Code Block |
---|
h2. Esimerkki Ajatellaan seuraavaa tilannetta: {code} int x; printf("Anna kokonaisluku: "); scanf("%d", &x); printf("%d/2 = %d\n", x, x/2); {code} Koodissa halutaan tulostaa muuttuja {{x}} jaettuna kahdella. |
...
Tämä toimii, niin kauan kun {{x}} on +kahdella jaollinen+. |
...
Arvolla {{x = 4}} ohjelma tulostaa: |
...
{noformat |
}4/2 = 2 {noformat}Mitä sitten jos {{x}} ei ole jaollinen kahdella? |
...
Oletetaan että {{x = 3}}, tällöin ohjelma tulostaa laskutoimituksen kokonaislukuna: |
...
{noformat |
}3/2 = 1 {noformat}Tämä ei käy päinsä, vaan haluamme luonnollisesti saada kaiken informaation oikein käyttäjälle. Yksi vaihtoehto on muuttaa muuttujan {{x}} tyyppi liukuluvuksi (float tai double), mutta tämä ei aina ole mahdollista tai haluttua. Tällöin voimme käyttää tyypinmuunnosta apuna. |
...
{code |
}
int x;
printf("Anna kokonaisluku: ");
scanf("%d", &x);
printf("%d/2 = %f\n", x, (float)x/2); // Huom. 1. tulostus on %d. 2. taas %f
|
Note |
---|
No Format |
{code} {note}{{(float)x}} riittää, sillä jos yksikin laskennan arvoista on {{float}}\-tyyppinen, on tuloskin tyyppiä {{float. |
Arvolla x = 3
ohjelma tulostaa:
}}.{note} Arvolla {{x = 3}} ohjelma tulostaa: {noformat} 3/2 = 1.500000 {noformat} |