Anda di halaman 1dari 3

CambiodetipodedatosenC

ltimamodificacinporGemaPrezFuentesel2015/10/0707:46
Comentarios(0)Adjuntos(0)HistorialInformacin
Contenidos
x
x
x
x

Objetivos
Introduccin
ReglasdeConversin
o Cambioexplcitodetiposdedatos(cast)
Resumen

Objetivos
Losobjetivosdeestemdulosonbsicamentelossiguientes:

1. Comprenderelconceptodecambiodetipodedatos.
2. Conocerlasreglasdelcambiodetiposimplcito.
3. Sabercuandoycomosedebenhacercambiosexplcitosdetipo.

Introduccin
Muyamenudosehacenecesariocambiareltipodedatosdeunaexpresin.Enla
mayoradeloscasos,elpropiocompiladordeCrealizaestasconversionesdeforma
totalmenteautomticaytransparentealprogramador.ElpropioestndardellenguajeC
(ISO/IEC9899)definelasreglasutilizadasparahacerestoscambios.Aunquenoes
necesariosaberestasnormasdememoria,siqueesimportantetenernocionesdecules
son,paraevitartenersorpresasenelfuncionamientodenuestrosprogramasysaber
cundohayquehacerlaconversindetipodeformaexplcita.Enestemdulosecitan
estasnormasyseponenalgunosejemplos.

ReglasdeConversin
Loscambiosautomticosdetipodedatosrepresentanunasimplificacindecaraal
propiocompiladordeC,nosabecmooperarcondoselementosdetiposdiferentes,y
portantocambiaeltipodeunodeellosparapoderoperarconelementosdelmismo
tipo.Tambintienenunsegundoobjetivo,queesfacilitareltrabajoalprogramador,ya
quenotienequehacerestoscambiosdeformaexplcitaenaquelloscasosinequvocos.
Acontinuacinsemuestraunalistasimplificadadelasnormasdelestndar,quees
suficientedecaraalaasignatura,peroquenocubretodoslosposiblescasos.Lasreglas
semuestranenelordendeaplicacin:
1. Siunaoperacininvolucradosoperandos,yunodeellosesdetipolongdouble,
elotroseconvierteenlongdouble.

2. Siunaoperacininvolucradosoperandos,yunodeellosesdetipodouble,el
otroseconvierteendouble.
3. Siunaoperacininvolucradosoperandos,yunodeellosesdetipofloat,elotro
seconvierteenfloat.
4. Enlamayoradeloscasos,losvaloresdetipocharyshortintseconviertenen
intinmediatamente.
5. Siunaoperacininvolucradosoperandos,yunodeellosesdetipolongint,el
otroseconvierteenlongint.
6. Siunaexpresininvolucratantoenterosconsignocomosinsigno,lasituacin
secomplica.Sieloperandosinsignotieneunacapacidadderepresentacin
menor(porejemplotenemosununsignedintyunlongint),porloqueeltipo
consignotienecapacidadpararepresentartodoslosvaloresdeltiposinsigno,el
valorsinsignoseconvierteeneltipoconsigno,yelresultadoadoptaestetipo
consigno.Encasocontrario(esdecir,sieltipoconsignonopuederepresentar
todoslosvaloresdeltiposinsigno,comoporejemplounsignedshortintyun
int),ambosvaloresseconviertenenuntiposinsignocomn,yelresultado
tieneestetiposinsigno.
7. Finalmente,cuandoseasignaunvaloraunavariablemedianteeloperadorde
asignacin,steseconvierteautomticamentealtipodelavariable,sitantoel
valorcomolavariabletienentipoaritmtico(esdecir,nmeroenteroopunto
flotante).

Cambioexplcitodetiposdedatos(cast)
Cuandonosencontramosconcasosnocubiertosporlasreglasanteriores,o
simplementenonosinteresaqueestasseapliquen,habrquehacerelcambiodetipode
datosdeformaexplcita.Enloscasosenqueseapliquelaregla6anteriormentecitada,
tambinesaconsejablehaceruncambioexplcitoparaevitarresultadosinesperados.
Enloscasosquenosinteresehaceruncambiodetipodedatosocast,loharemos
poniendoeltipodestinoentreparntesis,actuandocomounoperadorunario,loque
significaqueafectaraloquetengajustoasuderecha.Fjateenelsiguienteejemplo:
intmain(intargc,char**argv){
inta=1
intb=2
floatr
r=a/b

printf("%f",r)
return0
}
Quresultadoesperaramosquesemostraraporpantalla?Seguramentenos
esperaramosquelavariablertuvieraelvalor0.5,perorealmentetendrelvalor0.Si
analizamoslaexpresin"a/b",nosdaremoscuentaquetantoacomobsonenteros,y
portanto,laoperacinesunadivisinenteraquetienecomoresultado0.Despus

tenemosunaasignacinaunavariablereal,quesiguiendolaregla7,seconvierteen
realyseguardaenlavariabler.
Siloquequeremoshaceresqueladivisinnoseaentera,deberamoshaceruncambio
explcitodetiposdedatos:
intmain(intargc,char**argv){
inta=1
intb=2
floatr
r=(float)a/(float)b

printf("%f",r)
return0
}
Enesteejemplo,elcambiodetipo(float)seaplicatantoa"a"comoa"b",porlotanto,
ladivisinserentrerealesyelresultadoes0.5,queesloqueesperaramos.Dehecho,
teniendoencuentalaregla3,sloconquecambiemosunodelostiposyasera
suficiente,yaqueelcompiladorharaelotrocambiodeformaautomtica,portantoel
siguientecdigotambindaraelresultadoesperado:
intmain(intargc,char**argv){
inta=1
intb=2
floatr
r=(float)a/b

printf("%f",r)
return0
}

Resumen
Enestemdulohemosvistocmosehacenloscambiosdetipodedatosenellenguaje
C.Hemosvistoqueenlamayoradeloscasoselcompiladorloshaceautomticamente
siguiendounasreglas,peroqueenalgunoscasosdebemoshacerelcambiodeforma
explcita.

Anda mungkin juga menyukai