Técnicamente hablando no existe el printf
, cada biblioteca implementa la suya propia y, por lo tanto, su método para tratar de estudiar printf
el comportamiento haciendo lo que está haciendo no será de mucha utilidad. Podría estar intentando estudiar el comportamiento de printf
en su sistema, y si es así, debería leer la documentación y mirar el código fuente para ver printf
si está disponible para su biblioteca.
Por ejemplo, en mi Macbook, obtengo la salida 1606416304
con su programa.
Habiendo dicho eso, cuando pasas a float
a una función variada, float
se pasa como a double
. Entonces, su programa equivale a haber declarado a
como double
.
Para examinar los bytes de a double
, puede ver esta respuesta a una pregunta reciente aquí en SO.
Vamos a hacer eso:
#include <stdio.h>
int main(void)
{
double a = 1234.5f;
unsigned char *p = (unsigned char *)&a;
size_t i;
printf("size of double: %zu, int: %zu\n", sizeof(double), sizeof(int));
for (i=0; i < sizeof a; ++i)
printf("%02x ", p[i]);
putchar('\n');
return 0;
}
Cuando ejecuto el programa anterior, obtengo:
size of double: 8, int: 4
00 00 00 00 00 4a 93 40
Entonces, los primeros cuatro bytes double
resultaron ser 0, que puede ser la razón por la que obtuviste 0
como resultado de tu printf
llamada.
Para obtener resultados más interesantes, podemos cambiar un poco el programa:
#include <stdio.h>
int main(void)
{
double a = 1234.5f;
int b = 42;
printf("%d %d\n", a, b);
return 0;
}
Cuando ejecuto el programa anterior en mi Macbook, obtengo:
42 1606416384
Con el mismo programa en una máquina Linux, obtengo:
0 1083394560