2012-02-29 14 views
5

Nel mio caso, il prodotto di due numeri INT_MAX è 296447233, che non è corretto.Prodotto errato di due numeri INT_MAX in C/C++

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

Cosa sto facendo male e come correggerlo ?? Grazie!

+2

Um. ..INT_MAX è 2147483647 (per 32-bi t inti). Sei timido di 10000000. –

+0

Oh, no !!!!!! Sì, ho sbagliato INT_MAX. Grazie per segnalarlo ! – newprint

risposta

14

Entrambi i modelli 2137483647 sono di tipo int. Quindi rimangono quel tipo e overflow.

renderli long long s:

product = 2137483647LL * 2137483647LL; 

o del cast:

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

Quindi, sostanzialmente, il prodotto di due intro trabocca, anche se lo assegno a long long int? Grazie per la risposta ! – newprint

+4

corretto. Nel tuo esempio, la conversione avviene * dopo * la moltiplicazione. Quindi trabocca prima che venga promosso a "molto a lungo". – Mysticial

+1

Il compilatore tratterà i due numeri come ints, fa la matematica e poi pensa a mettere il valore in 'product'. –

6

Prova

product = 2137483647LL * 2137483647LL; 

per garantire che la compilazione tratta i numeri più a lungo a lungo

+0

Oh e I ho fatto +1 per aver indicato il 'LL'. – Mysticial