elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Java [Guía] Patrones de diseño - Parte 1


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  Especificadores de formato
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Especificadores de formato  (Leído 304 veces)
hellrider1990

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Especificadores de formato
« en: 10 Septiembre 2017, 05:42 »

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
-Engel Lex


« Última modificación: 10 Septiembre 2017, 06:05 por engel lex » En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.295


ASMático


Ver Perfil WWW
Re: Especificadores de formato
« Respuesta #1 en: 10 Septiembre 2017, 12:52 »

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.



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".


En línea

hellrider1990

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Especificadores de formato
« Respuesta #2 en: 10 Septiembre 2017, 13:32 »

Muchas gracias por la explicación Ivancea96, me ha resultado muy útil  ;-) ;-) ;-)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines