Articles

C-Type Casting

advertises

yhden datatyypin muuntamista toiseen kutsutaan tyyppivaluksi tai tyyppimuunnokseksi. Esimerkiksi, jos haluat tallentaa ’pitkä’ arvo osaksi yksinkertainen kokonaisluku sitten voit kirjoittaa valettu ’ pitkä ’ja’int’. Arvot tyypistä toiseen voidaan muuntaa eksplisiittisesti valuoperaattorin avulla seuraavasti −

(type_name) expression

harkitse seuraavaa esimerkkiä, jossa valuoperaattori aiheuttaa yhden kokonaislukumuuttujan jaon toisella suoritettavaksi liukulukuoperaationa-

#include <stdio.h>main() { int sum = 17, count = 5; double mean; mean = (double) sum / count; printf("Value of mean : %f\n", mean );}

kun Yllä oleva koodi kootaan ja suoritetaan, se tuottaa seuraavan tuloksen −

Value of mean : 3.400000

tässä on huomioitava, että valetun operaattorin arvo on jaon yläpuolella, joten summan arvo muunnetaan ensin tyypiksi kaksinkertainen ja lopulta se saa jaettuna laskemalla, jolloin saadaan kaksinkertainen arvo.

tyypin muunnokset voivat olla implisiittisiä, jotka kääntäjä suorittaa automaattisesti, tai se voidaan määrittää eksplisiittisesti valetun operaattorin avulla. Hyvänä ohjelmointikäytäntönä pidetään cast-operaattorin käyttöä aina, kun tyyppimuunnoksia tarvitaan.

Kokonaislukukampanja

Kokonaislukukampanja on prosessi, jolla kokonaislukutyypin ”pienemmät” arvot kuin int tai unsigned int muunnetaan joko int: ksi tai unsigned int: ksi. Tarkastellaan esimerkiksi merkin lisäämistä kokonaisluvulla −

#include <stdio.h>main() { int i = 17; char c = 'c'; /* ascii value is 99 */ int sum; sum = i + c; printf("Value of sum : %d\n", sum );}

kun Yllä oleva koodi kootaan ja suoritetaan, se tuottaa seuraavan tuloksen –

Value of sum : 116

tässä summan arvo on 116, koska kääntäjä tekee kokonaislukuedistystä ja muuntaa ”c”: n arvon ASCII: ksi ennen varsinaisen yhteenlaskuoperaation suorittamista.

tavallinen aritmeettinen muunnos

tavanomaiset aritmeettiset muunnokset suoritetaan implisiittisesti niiden arvojen valamiseksi yhteiseen tyyppiin. Kääntäjä suorittaa ensin kokonaisluku edistäminen; jos operandeja on edelleen erityyppisiä, ne muunnetaan tyypiksi, joka esiintyy seuraavassa hierarkiassa korkeimpana −

tavanomaisia aritmeettisia muunnoksia ei suoriteta tehtäväoperaattoreille eikä loogisille operaattoreille && ja ||. Otetaan seuraava esimerkki käsitteen ymmärtämiseksi −

#include <stdio.h>main() { int i = 17; char c = 'c'; /* ascii value is 99 */ float sum; sum = i + c; printf("Value of sum : %f\n", sum );}

kun Yllä oleva koodi kootaan ja suoritetaan, se tuottaa seuraavan tuloksen −

Value of sum : 116.000000

tässä on helppo ymmärtää, että ensimmäinen c muunnetaan kokonaisluvuksi, mutta koska lopullinen arvo on kaksinkertainen, tavallinen aritmeettinen muunnos pätee ja kääntäjä muuntaa I: n ja c: n ”floatiksi” ja lisää ne tuloksena ”kelluva” tulos.

mainokset