PDA

Visualizza la versione completa : [C] Warning: integer overflow in expression


dario848
03-10-2011, 16:04
Salve a tutti,
ho un problema sulla rappresentazione dell'unsigned long long int. Quando effettuo una moltiplicazione il cui valore supera 2^32-1, memorizzo il risultato in una variabile unsigned long long int ma il risultato non corretto.
Se provo ad effettuare una moltiplicazione con valori numerici inserendo il risultato nella variabile unsigned long long ricevo un errore:

"warning: integer overflow in expression"

Quale potrebbe essere il problema?

lavoro con GCC 4.4.3 in ambiente Linux x86 32bit.

Grazie in anticipo.

oregon
03-10-2011, 16:13
Qual il codice che ti d l'errore?

dario848
03-10-2011, 16:19
ti posto il caso in cui faccio la moltiplicazione direttamente con i valori:


unsigned long long byte=1048608*4096;

oregon
03-10-2011, 16:23
Beh, ovvio ... deve essere


unsigned long long byte=(unsigned long long)1048608*4096;

dario848
03-10-2011, 16:32
Originariamente inviato da oregon
Beh, ovvio ... deve essere


unsigned long long byte=(unsigned long long)1048608*4096;

Grazie mille.....Sei stato gentilissimo...

linoma
03-10-2011, 16:53
Se nn ricordo male puoi accodare al numerico LLU.

MItaly
03-10-2011, 16:55
O, senza usare il cast e usando direttamente literal del tipo giusto:


unsigned long long byte=1048608ULL*4096ULL;

(qui non fa differenza, ma se vuoi specificare direttamente un tipo che sfora dalle dimensioni di un int devi usare i literal di tipo giusto)

---EDIT---
Ecco, linoma mi ha anticipato. :mem:

Loading