You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 10 Current »

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.

Syntaksi

(haluttu_tyyppi)muuttuja;

Tyypinmuunnos voidaan tehdä myös välitulokselle:

(haluttu_tyyppi)(muuttuja1*muuttuja2);

Tässä laskennan muuttuja1*muuttuja2 tulokselle suoritetaan tyypinmuunnos.

Esimerkki

Ajatellaan seuraavaa tilannetta:

int x;
printf("Anna kokonaisluku: ");
scanf("%d", &x);
printf("%d/2 = %d\n", x, x/2);

Koodissa halutaan tulostaa muuttuja x jaettuna kahdella.
Tämä toimii, niin kauan kun x on kahdella jaollinen.
Arvolla x = 4 ohjelma tulostaa:

4/2 = 2

Mitä sitten jos x ei ole jaollinen kahdella?
Oletetaan että x = 3, tällöin ohjelma tulostaa laskutoimituksen kokonaislukuna:

3/2 = 1

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.

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

(float)x riittää, sillä jos yksikin laskennan arvoista on float-tyyppinen, on tuloskin tyyppiä float.

Arvolla x = 3 ohjelma tulostaa:

3/2 = 1.500000
  • No labels
You must log in to comment.