Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 4.0
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}