2012-02-29 6 views
5

En mi caso, el producto de dos números INT_MAX es 296447233, que es incorrecto.Producto incorrecto de dos INT_MAX numbes en C/C++

long long int product = 0; 
product = 2137483647 * 2137483647; 
printf("product: %lli\n", product); 

¿Qué estoy haciendo mal y cómo corregirlo? Gracias!

+2

Um. ..INT_MAX es 2147483647 (para 32-bi ttsts). Eres tímido por 10000000. –

+0

¡Oh, no! Sí, tengo INT_MAX mal. Gracias por mencionarlo ! – newprint

Respuesta

14

Ambos de sus 2137483647 son del tipo int. Entonces ellos permanecen ese tipo y se desbordan.

Hacer ellas long long s:

product = 2137483647LL * 2137483647LL; 

o elenco:

product = (long long)2137483647 * 2137483647; 
+0

Entonces, básicamente, ¿el producto de dos entradas se desborda, aunque lo estoy asignando a int largo largo? Gracias por la respuesta ! – newprint

+4

Correcto. En su ejemplo, la conversión ocurre * después de * la multiplicación. Por lo tanto, se desborda antes de ser promovido a 'long long'. – Mysticial

+1

El compilador tratará los dos números como enteros, hará las matemáticas y luego piensa en poner el valor en 'producto'. –

6

Trate

product = 2137483647LL * 2137483647LL; 

para garantizar que la compilación trata a los números, siempre y largas

+0

Oh y I + 1 hicieron una llamada para indicar el 'LL'. – Mysticial