Estoy usando TurboC++. Escribo la siguiente expresión que no da como resultado una evaluación adecuada, ¿me estoy perdiendo algún concepto detrás de ella?
int c=300*300/300; printf("%d",c);la salida es
81
¿Por qué?
300*300 is 90000.Suponiendo que int es de 16 bits, se ha desbordado.
El desbordamiento se envuelve, dándote: 24464 .
24465/300 = 81.55No confíes en esto. Es un comportamiento indefinido.
La evaluación de 300 * 300 / 300 ocurre de izquierda a derecha.
300 * 300 desborda un tipo integral con signo de 16 bits (un int en Turbo C++ es de 16 bits). Como el cálculo se realizará en aritmética con signos, el resultado es indefinido .
Lo que sucede es que 300 * 300 se envuelve para darte 24464. (24464 + 32768 + 32768 = 90000).
24464/300 es 81 en división entera.