Ir al contenido principal

C: Conversiones de tipo (casting) en C...

El casting o simplemente cast nos permite hacer una conversión explícita de un tipo de dato a otro, a criterio del programador siempre y cuando estos tipos sean compatibles.

Este cast se realiza a través de un operador de conversión de tipos (type casting operator) y es un recurso a tener en cuenta ya que hay situaciones en que nos puede resultar de gran utilidad.

Hacer uso de un cast es tan sencillo como poner (tipo de dato) delante de la expresión o variable a convertir.

Veamos un ejemplo:


Declaramos una variable de tipo int con un identificador tan creativo como "a" y le realizamos diferentes cast a a para mostrarlo como si fuera un float, un double y un char en un printf. Lo que obtendríamos en pantalla sería lo siguiente:


Donde tenemos el valor de nuestro a, a convertido en float y double (mostrándolo con 3 cifras decimales) y a convertido en char. Si vemos este último caso, al hacer la conversión de "a" a char toma a como el código ascii del char y lo muestra; en nuestro ejemplo 121 es el ascii de la letra "y".

Esto puede hacerse con variables de otros tipos diferentes a int y obtendríamos resultados similares mientras la conversión sea posible:


En pantalla veríamos lo siguiente:


Un ejemplo donde nos podría ser útil el uso de cast es para realizar la división entre dos int manteniendo los decimales en el resultado. Para ello haríamos lo siguiente:




De esta manera obtendríamos como resultado 2.50 que es lo que buscábamos. Si no haríamos el cast el resultado sería 2.00 ya que se pasaría a float el resultado de la división entera de 5 en 2 que es 2.


Y así hay muchas situaciones en que podemos utilizarlo, como cuando lleguemos a C avanzado donde haremos incluso cast a punteros para lograr cosas que normalmente no podríamos hacer.


Espero que esta explicación les sea de utilidad y los esperamos en las próximas entradas acerca del lenguaje C...


Português:

O casting ou simplesmente elenco nos permite fazer uma conversão explícita de um tipo de dados para outro, a critério do programador, desde que esses tipos sejam compatíveis.

Essa conversão é feita por meio de um operador de conversão de tipo (operador de conversão de tipo) e é um recurso a ser considerado, pois há situações em que podemos ser muito úteis.

Fazer uso de um elenco é tão simples quanto colocar (tipo de dados) na frente da expressão ou variável a ser convertida.

Vamos ver um exemplo:



Declaramos uma variável do tipo int com um identificador tão criativo quanto "a" e realizamos cast diferente para um para mostrá-lo como se fosse um float, um double e um char em um printf. O que teríamos na tela seria o seguinte:



Onde temos o valor do nosso a, tornar-se float e double (mostrando-o com 3 casas decimais) e se tornar char. Se virmos este último caso, ao fazer a conversão de "a" para char ele leva para como o código ascii do char e o mostra; no nosso exemplo 121 é o ascii da letra "y".

Isso pode ser feito com variáveis ​​de outros tipos além de int e obteríamos resultados semelhantes enquanto a conversão é possível:



Na tela, veríamos o seguinte:



Um exemplo em que poderíamos usar o uso do cast é fazer a divisão entre dois int mantendo os decimais no resultado. Para isso, faríamos o seguinte:





Desta forma obteríamos como resultado 2.50 o que estávamos procurando. Se não fizermos o elenco, o resultado seria 2,00, pois o resultado de toda a divisão de 5 em 2 seria float, que é 2.


E assim, há muitas situações em que podemos usá-lo, como quando chegamos ao C avançado, onde até mesmo lançamos ponteiros para alcançar coisas que normalmente não poderíamos fazer.


Espero que esta explicação seja útil e esperamos vê-lo nos próximos posts sobre a linguagem C ...

English:

The casting or simply cast allows us to make an explicit conversion of one type of data to another, at the discretion of the programmer as long as these types are compatible.

This cast is done through a type conversion operator (type casting operator) and is a resource to be taken into account as there are situations in which we can be very useful.

Making use of a cast is as simple as putting (data type) in front of the expression or variable to convert.

Let's see an example:



We declare a variable of type int with an identifier as creative as "a" and we perform different cast to a to show it as if it were a float, a double and a char in a printf. What we would get on the screen would be the following:



Where we have the value of our a, to become float and double (showing it with 3 decimal places) and to become char. If we see this last case, when doing the conversion from "a" to char it takes to as the ascii code of the char and shows it; in our example 121 is the ascii of the letter "y".

This can be done with variables of other types than int and we would obtain similar results while the conversion is possible:



On the screen we would see the following:



An example where we could use the use of cast is to make the division between two int keeping the decimals in the result. For this we would do the following:





In this way we would obtain as a result 2.50 what we were looking for. If we did not do the cast, the result would be 2.00 since the result of the whole division of 5 in 2 would be float, which is 2.


And so there are many situations in which we can use it, like when we get to advanced C where we will even cast pointers to achieve things that we normally could not do.


I hope this explanation will be useful and we look forward to seeing you in the next posts about the C language ...

Comentarios

  1. Y si quiero que un char='5' me de ese mismo numero para un entero? (no su ascii)

    ResponderEliminar
  2. Hola, tengo el siguiente problema, quiero leer de un fichero números con decimales, por ejemplo 0.001 o 0,001 en los USA, he probado con fscanf pero no me lo lee correctamente, con fgets si pero al hacer el cast me dice que no son tipos compatibles, he visto que de char a float sí lo son, cómo podría pasarlos a char y asignárselo a un float?, muchísimas gracias por adelantado. Utilizo borland c++ versión 5.02 como entorno de programación.

    Un saludo Francisco Javier Moreno

    ResponderEliminar
  3. Muy bueno, si puedes pon un ejempolo de casteo con punteros. Gracias

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

C: Ejemplos: Congruencia de Zeller (nivel básico) ...

La Congruencia de Zeller es un algoritmo que se atribuye al matemático alemán Julius Christian Johannes Zeller que vivió en el siglo XIX. Este algoritmo nos permite determinar el día de la semana que le corresponde a una fecha determinada del calendario Gregoriano. La fórmula que nosotros usaremos (con algunas modificaciones respecto de la original para poder usarla en  informática) es la siguiente: Donde h es el día de la semana (entre 0 y 6), J es año/100 (la centuria) y K es año mod 100 (el año de la centuria). Y hay que tener en cuenta que los meses de enero y febrero cuentan como el mes 13 y 14 del año anterior. Ahora que tenemos la fórmula, programemos el algoritmo en C mediante el uso de una función: Analicemos el código paso a paso: Tenemos en cuenta el caso de enero y febrero: Dijimos que estos meses corresponden a los meses 13 y 14 del año anterior por lo que los asignamos como corresponde (mes + 12 , que dará 13 para enero y 14 para febrero) y le rest

Algoritmos: Resolución de problemas y refinamientos en pseudocódigo...

En otras entradas, vimos las partes que debe tener nuestro algoritmo en pseudocódigo y las estructuras que utilizaremos para resolverlo. Ahora llega el turno de implementar todo en conjunto para dar origen a nuestra creación. Pero ¿cómo resolvemos un problema así? Para hacerlo, utilizaremos lo que llamamos refinamientos sucesivos. Este concepto consiste en dividir el problema en subproblemas más pequeños y a estos, a su vez, en otros más pequeños; y así sucesivamente hasta que la solución de los últimos sea trivial, sencillo de resolver. Luego usaremos todas las soluciones obtenidas para armar la solución de nuestro problema mayor. Este principio, tiene base en parte de la técnica divide and conquer (dependiendo de la traducción: "divide y vencerás") que es una de las muchas técnicas de resolución de algoritmos existentes. Como vemos, al dividir el problema en otros más pequeños y más fáciles de resolver, podemos pasar de un problema complicado a uno cuya solución es much