Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: hellrider1990 en 10 Septiembre 2017, 05:42 am



Título: Especificadores de formato
Publicado por: hellrider1990 en 10 Septiembre 2017, 05:42 am
Buenas. He empezado a aprender C por empezar por algún lenguaje de programación y ahí voy poco a poco.

Tengo una duda con respecto a la parte matemática de los especificadores de formato.

%f: para números reales con signo.

%d: para números enteros con signo.

Eso es lo que dice en una página, pero si busco la teoría me pone que un número entero es un número real. Entonces no entiendo dónde está la diferencia, aunque sí sé  que no es lo mismo, puesto que he probado a usar sizeof y si pongo %f me da 0.000, sin embargo con %d me da un número entero.

Código
  1. #include <stdio.h>
  2. #include <conio.h>
  3.  
  4. int main (void)
  5.  
  6. {
  7.  
  8. printf("la variable de tipo entero ocupa %d bytes de memoria\n\n", sizeof(int));
  9.  
  10. return 0;}
  11.  
Esto me devuelve 4 porque le estoy pidiendo un número entero con %d, pero si pongo %f me devuelve 0.000. La confusión que tengo es que si busco la teoría, un número entero es un número real, por tanto también debería de darme un número entero si ese es el resultado al poner eso.

Os agradezco que me saquéis la duda, un saludo.




· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro (http://foro.elhacker.net/reglas.htm)
-Engel Lex


Título: Re: Especificadores de formato
Publicado por: ivancea96 en 10 Septiembre 2017, 12:52 pm
Un número entero es un número real, pero un número real no es un número entero.
Un número entero es un sub-conjunto dentro de los números reales.

(http://www.numerosreales.com/wp-content/imagenes/Numeros-Reales.png)

De todos modos, olvídate por un momento del formato de printf. En C hay variostipos, y dentro de los tipos nativos podemos diferenciar 2 grupos: los enteros y los reales, que están en formato coma flotante. Los enteros no tienen decimales, los flotantes sí.

Si te da 0.000 cuando pones %f es un error lógico. Le estás diciendo que va a recibir un flotante, y le pasas un entero. Ten en cuenta que poner %f en vez de %d no cambia nada más que la forma en la que interpreta printf el parámetro que le pasas.

Citar
por tanto también debería de darme un número entero si ese es el resultado al poner eso.

Es muy diferente en programación un número entero de un número en coma flotante. "Coma flotante" es el nombre de un estándar. Mientras que los enteros se almacenan en memoria de un modo (generalmente, en complemento a dos), mientras que la coma flotante de otro más complejo, que no tiene nada que ver. Cuando printf coge el entero como si fuera un float, está leyendolo como si estuviera en formato de coma flotante, y los valores que te muestre van a ser casi "aleatorios".


Título: Re: Especificadores de formato
Publicado por: hellrider1990 en 10 Septiembre 2017, 13:32 pm
Muchas gracias por la explicación Ivancea96, me ha resultado muy útil  ;-) ;-) ;-)