Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2010
    Messaggi
    14

    [C] unsigned long long int problema

    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.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Qual è il codice che ti dà l'errore?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2010
    Messaggi
    14
    ti posto il caso in cui faccio la moltiplicazione direttamente con i valori:

    codice:
    unsigned long long  byte=1048608*4096;

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Beh, ovvio ... deve essere

    codice:
    unsigned long long  byte=(unsigned long long)1048608*4096;
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2010
    Messaggi
    14
    Originariamente inviato da oregon
    Beh, ovvio ... deve essere

    codice:
    unsigned long long  byte=(unsigned long long)1048608*4096;
    Grazie mille.....Sei stato gentilissimo...

  6. #6
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Se nn ricordo male puoi accodare al numerico LLU.
    Per gli Spartani e Sparta usa spartan Il mio github

  7. #7
    O, senza usare il cast e usando direttamente literal del tipo giusto:
    codice:
    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.
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.