Red de conocimientos sobre prescripción popular - Colección de remedios caseros - Conversión forzada entre números enteros y puntos flotantes y caracteres de formato de salida en lenguaje C

Conversión forzada entre números enteros y puntos flotantes y caracteres de formato de salida en lenguaje C

1: Esto implica la conversión de parámetros indefinidos cuando la función ingresa a la pila. Es de tipo flotante y doble. Cuando se inserta en la pila, se calcula como doble, que es de 8 bytes, por lo tanto, no importa si el parámetro es %f o %lf, se toman 8 bytes y luego se fuerza su conversión; f;

/ /Segunda vez

int a = 3; double b = 1; b = 1/a;

printf(" %-15d % -15d %-15f %-15f " , 1.0/a, b, 1.0/a, b);

Resultado de salida: 1431655765 10438+0 0.0000000 0.500000005

La pila es doble , doble, doble, doble (8, 8, 8, 8); 1.0/3, 0.0, 1.0/3, 0.0

Int, int, float y float (4, 4, 8, 8) se utilizan en la función.

Análisis: Primero, los 8 bytes ocupados por 1.0/3 se dividen uniformemente en 4 bytes y se generan como int; el segundo 0.0 se genera como flotante; 0.0 es inútil; por lo que el resultado es equivalente a printf(" %-15d %-15d %-15f %-15f ", 1.0/a, b, 1.0/a); (" %-15d %- 15d %-15f %-15f ", 1.0/a, b, b) el resultado es equivalente a printf(" %-15d %-15d %-15f %-15f ", 1.0/a); , b, 1.0/3);

//Tercera revisión

int a = 3;

Doble b = 1; b = 1.0/a;

printf(" %-15d %-15d %-15f %-15f ", 1/a, b, 1/a, b); El resultado de salida es: 0 14165565 0 000000 0.500001

Los tipos de bytes insertados en la pila son int, double, int y double (4, 8, 4, 8); 1.0/3

Los bytes utilizados en la función son int, int, float y float (4, 4, 8, 8).

Obviamente en la segunda posición; se tomarán los primeros 4 bytes del tipo 1.0/3double; luego los últimos cuatro bytes de 1.0/3double, los cuatro bytes de 0int, 1.0/3 ocho bytes. Los dos 4 bytes restantes se convierten juntos en tipo flotante. El resultado de doube es 5.291174399002 e-315, que es 0 cuando se convierte en flotante 1.0/3 se convierte en número de punto flotante y es 0.333333.

//Cuarta revisión

int a = 3;

Doble b = 1;

b = 1.0/a; p>

printf(" %-15d %-15d %-15f %-15f ", 1.0/a, b, 1.0/a, b

Resultado de salida: 14165765+0438 +0.000000001);

Los tipos de bytes insertados en la pila son int, double, int y double (4, 8, 4, 8); >

Los bytes utilizados en la función son int, int, float y float (4, 4, 8, 8).

Según el análisis anterior, este debe ser el resultado.

Equivalente a printf(" %-15d %-15d %-15f %-15f ", 1.0/a, b, 1.0/a

);