Tyypinmuunnos C:ssä: implisiittinen ja eksplisiittinen muunnos
⚡ Älykäs yhteenveto
C-kielen tyypinmuunnos muuntaa yhden tietotyypin toiseksi joko implisiittisesti, kun kääntäjä mainostaa automaattisesti pienempää yhteensopivaa tyyppiä, tai eksplisiittisesti, kun ohjelmoija pakottaa muunnoksen tyypinmuunnosoperaattorilla tarkkuuden hallitsemiseksi ja odottamattomien tulosten estämiseksi.
Mitä Typecasting on C:ssä?
Typecasting on tietotyypin muuntamista toiseksi. Sitä kutsutaan myös datamuunnokseksi tai tyyppimuunnokseksi C-kielellä. Se on yksi tärkeimmistä C-ohjelmoinnin käsitteistä.
"C"-ohjelmointi tarjoaa kahdentyyppisiä valutoimintoja:
- Epäsuora tyypin suoratoisto
- Eksplisiittisen tyypin casting
Epäsuora tyypin suoratoisto
Implisiittinen tyyppimuunnos tarkoittaa tietotyyppien muuntamista menettämättä niiden alkuperäistä merkitystä. Tämän tyyppinen tyyppimuunnos on välttämätön, kun haluat muuttaa tietotyyppejä muuttamatta tyypin sisällä tallennettujen arvojen merkitystä. muuttuja.
Implisiittisen tyypin muunnos C:ssä tapahtuu automaattisesti, kun arvo kopioidaan sen yhteensopivaan tietotyyppiin. Muuntamisen aikana sovelletaan tiukkoja tyyppimuunnossääntöjä. Jos operandit ovat kahta eri tietotyyppiä, niin operandi, jolla on pienempi tietotyyppi, muunnetaan automaattisesti korkeammaksi tietotyypiksi. Tämän tyyppinen muunnos näkyy seuraavassa esimerkissä.
#include<stdio.h> int main(){ short a=10; //initializing variable of short data type int b; //declaring int variable b=a; //implicit type casting printf("%d\n",a); printf("%d\n",b); }
lähtö:
10 10
- Annetussa esimerkissä olemme ilmoittaneet lyhyen tietotyypin muuttujan, jonka arvo on alustettu 10:ksi.
- Toisella rivillä olemme ilmoittaneet int-tietotyypin muuttujan.
- Kolmannella rivillä olemme määrittäneet muuttujan s arvon muuttujalle a. Kolmannella rivillä implisiittisen tyypin muunnos suoritetaan, kun lyhytdatatyyppisen muuttujan s arvo kopioidaan muuttujaan a, joka on int-datatyyppiä.
Muunnetaan merkki Int
Harkitse esimerkkiä ASCII-koodatun merkin lisäämisestä kokonaisluvulla:
#include <stdio.h> main() { int number = 1; char character = 'k'; /*ASCII value is 107 */ int sum; sum = number + character; printf("Value of sum : %d\n", sum ); }
lähtö:
Value of sum : 108
Tässä kääntäjä on tehnyt kokonaislukupromotion muuntamalla 'k':n arvon ASCII:ksi ennen varsinaisen summausoperaation suorittamista.
Aritmeettinen muunnoshierarkia
Kääntäjä etenee ensin merkin ylentämiseksi kokonaisluvuksi. Jos operandeissa on edelleen erilaisia tietotyyppejä, ne muunnetaan korkeimmaksi tietotyypiksi, joka näkyy seuraavassa hierarkiakaaviossa:
Harkitse seuraavaa esimerkkiä ymmärtääksesi käsitteen:
#include <stdio.h> main() { int num = 13; char c = 'k'; /* ASCII value is 107 */ float sum; sum = num + c; printf("sum = %f\n", sum );}
lähtö:
sum = 120.000000
Ensinnäkin c-muuttuja muunnetaan kokonaisluvuksi, mutta kääntäjä muuntaa num- ja c-muuttujat "float"-luvuiksi ja laskee ne yhteen tuottaakseen 'float'-tuloksen.
Tärkeitä seikkoja implisiittisistä konversioista
- Implisiittistä tyyppimuunnostyyppiä kutsutaan myös vakiotyyppimuunnokseksi. Emme vaadi avainsanoja tai erityislauseita implisiittisessä tyyppivalussa.
- Pienemmän tietotyypin muuntamista suuremmaksi kutsutaan myös tyypin edistämiseksi. Yllä olevassa esimerkissä voimme myös sanoa, että s:n arvoa ylennetään tyypiksi kokonaisluku.
- Implisiittinen tyyppimuunnos tapahtuu aina yhteensopivien tietotyyppien kanssa.
Emme voi suorittaa implisiittistä tyyppisuoraa tietotyypeille, jotka eivät ole yhteensopivia keskenään, kuten:
- Floatin muuntaminen int:ksi katkaisee murto-osan, mikä menettää arvon merkityksen.
- Tuplauksen muuntaminen kelluvaksi pyöristää luvut ylöspäin.
- Pitkän kokonaislukumäärän muuntaminen kokonaislukumääräksi aiheuttaa virheenping ylimääräisistä korkeamman asteen biteistä.
Kaikissa yllä olevissa tapauksissa, kun muunnamme tietotyypit, arvo menettää merkityksensä. Yleensä kääntäjä varoittaa arvon merkityksen menettämisestä.
"C" ohjelmointi tarjoaa toisen tavan typecastingille, joka on eksplisiittinen tyyppivalu.
Eksplisiittisen tyypin casting
Implisiittisessä tyyppimuunnoksessa tietotyyppi muunnetaan automaattisesti. Joissakin tilanteissa saatamme joutua pakottamaan tyyppimuunnoksen. Oletetaan, että meillä on muuttuja div, joka tallentaa kahden operandin jaon, jotka on ilmoitettu int-tietotyypiksi.
int result, var1=10, var2=3;
result=var1/var2;
Tässä tapauksessa muuttujille var1 ja var2 tehdyn jaon jälkeen muuttujaan “result” tallennettu tulos on kokonaislukumuodossa. Aina kun näin tapahtuu, muuttujaan ”result” tallennettu arvo menettää merkityksensä, koska se ei ota huomioon murto-osaa, joka tavallisesti saadaan jaettaessa kahta lukua.
Pakottaaksemme tyyppimuunnoksen tällaisissa tilanteissa käytämme eksplisiittistä tyyppivalua.
Se vaatii tyyppivaluoperaattorin. Tyyppivalutoimintojen yleinen syntaksi on seuraava:
(type-name) expression
Täällä
- Tyypin nimi on standardi C-kielen tietotyyppi.
- Lauseke voi olla vakio, muuttuja tai todellinen lauseke.
Kirjoitetaan ohjelma, joka havainnollistaa, kuinka C:ssä kirjoitetaan eksplisiittisellä type-castingilla.
#include<stdio.h> int main() { float a = 1.2; //int b = a; //Compiler will throw an error for this int b = (int)a + 1; printf("Value of a is %f\n", a); printf("Value of b is %d\n",b); return 0; }
lähtö:
Value of a is 1.200000 Value of b is 2
- Olemme alustaneet float-tyypin muuttujan 'a'.
- Seuraavaksi meillä on toinen muuttuja 'b', jonka tietotyyppi on kokonaisluku. Koska muuttujat 'a' ja 'b' ovat eri tietotyyppiä, 'C' ei salli tällaisen lausekkeen käyttöä ja se aiheuttaa virheen. Joissakin 'C':n versioissa lauseke lasketaan, mutta tulosta ei haluta.
- Tällaisten tilanteiden välttämiseksi olemme kirjoittaneet float-tyypin muuttujan "a". Explicit type casting -menetelmiä käyttämällä olemme onnistuneesti muuntaneet floatin tietotyypin kokonaisluvuiksi.
- Meillä on painettu arvo "a", joka on edelleen kelluva
- Tyyppilähetyksen jälkeen tulos on aina kokonaisluku 'b'.
Tällä tavalla voimme toteuttaa eksplisiittisen tyyppivalun C-ohjelmoinnissa.




