¡Bienvenido al maravilloso mundo de las conversiones aritméticas habituales [1]!
Larga historia corta en lenguajes familiares C, las constantes tienen el tipo [2] y cuando se usan en operaciones aritméticas pasan por un conjunto estándar de promociones cuando se usan.
El literal “1” tiene el tipo int, cuyo tamaño puede variar de una plataforma a otra. ayb son ambos enteros, por lo que la expresión se evaluará en el tipo de clasificación más baja que se ajuste a ambos operandos. 1 / a [i] [i] = int. Terminas perdiendo la parte fraccional del resultado de la división antes de multiplicar por el resultado de b [i] – S.
1.0 es flotante, por lo que un [i] [i] es promovido a flotante antes de que se realice la división, y puedes mantener la parte fraccional de la división.
- ¿Cuál es la prueba de las ecuaciones cinemáticas?
- ¿Se resolverán las ecuaciones de Navier Stoke?
- Cómo resolver ecuaciones matemáticas rápidamente
- ¿Por qué algunos científicos escriben ecuaciones / teorías en las paredes?
- ¿Por qué la aceleración y la velocidad inicial están presentes en las tres ecuaciones cinemáticas y no en las otras tres variables?
Hay todo un conjunto de ejemplos divertidos relacionados con esto.
int a = -10;
sin int int b = 2;
int c = a / b; // c = 5
int d = a / ((int) b); // c = -5
int16_t a = -10;
uint16_t b = 2;
int16_t c = a / b; // si int es 2 bytes, obtendrás 5. si int es más, obtendrás -5. Depende de tu compilador!
int a = -5;
unsigned int = 10;
si (a <b) {
printf (“Puedes pensar que vas aquí”);
} más {
printf {“Pero terminas aquí en su lugar”};
}
Notas al pie
[1] http://www.open-std.org/jtc1/sc2…
[2] C Constantes y literales