Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Overflow tipo Int
Forum - C/C++ - Overflow tipo Int

Avatar
swet (Normal User)
Pro


Messaggi: 128
Iscritto: 01/01/2009

Segnala al moderatore
Postato alle 14:47
Mercoledì, 26/10/2011
Ciao a tutti ragazzi, mi trovo in difficoltà con il tipo int del c++, premetto che uso una macchina 32 bit, il tipo int in c++ con il compilatore netbeans sta su 2 byte quindi il valore massimo ammissibile per un tipo int sarebbe 32767, da qui il mio dilemma, perché scrivendo questa istruzione:

Codice sorgente - presumibilmente C/C++

  1. int i  = 32767;
  2.     ++i;
  3.        
  4.     cout << i;



il programma non va in overflow ( restituendo -32768) ma mostra in output 32768?

Grazie!


PM
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Up
1
Down
V
Segnala al moderatore
Postato alle 15:48
Mercoledì, 26/10/2011
Perché nessun controllo viene effettuato automaticamente sull'overflow.

Quindi dal valore esadecimale 7FFF passa al valore esadecimale 8000.

In complemento a due (per i valori interi con segno) il primo è 32767 e il secondo -32768 (non 32768 ma -32768)

Ti ringrazio per la risposta! Quando il professore ce lo ha spiegato, ce lo ha anche fatto vedere, ed effettivamente quando addizionava 1 a 32767, il programma restituiva - 32768, mi sono perso qualche passo secondo te? Qualche istruzione? - swet - 26/10/11 15:58
Non hai seguito la spiegazione riguardante la rappresentazione binaria degli interi (puri e in complemento a due) - nessuno - 26/10/11 16:12
Ma allora secondo te, come mai al professore funziona e a me no?! Grazie! - swet - 26/10/11 16:39
Secondo me dovresti controllare l'effettiva dimensione degli int nel tuo compilatore... che ti ritorna cout << sizeof(int)? - pierotofy - 26/10/11 16:44
Perché il tuo compilatore usa 4 byte per l'int e non 2 come credi. Devi usare uno short int per i 2 byte - nessuno - 26/10/11 16:44
... il discorso torna, rispetto a ciò che ho scritto :P - Pitagora - 26/10/11 18:06
Ragazzi ora tornano i conti! avevate ragione, se uso lo short int funziona...è un piccolo errore riportato in alcune slide!!! - swet - 26/10/11 19:01


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM
Avatar
Pitagora (Member)
Expert


Messaggi: 367
Iscritto: 12/06/2010

Up
1
Down
V
Segnala al moderatore
Postato alle 16:01
Mercoledì, 26/10/2011
mmm io penso che la cosa è alquanto ovvia. Con2 byte ( 16 bit ) puoi rappresentare 2^16 combinazioni (numeri)

Il numero maggiore che rientra in questo intervallo è 65535 ( 2^(2*8) - 1 ). La variabile non va in overflow perché il numero rientra nell'intervallo. Prova ad assegnarli 65535 e successivamente incrementala!

:k:


Yep, I came back :P
PM
Avatar
Pitagora (Member)
Expert


Messaggi: 367
Iscritto: 12/06/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 15:57
Mercoledì, 26/10/2011
!DELETEME!

Ultima modifica effettuata da Pitagora il 26/10/2011 alle 16:01
Grazie ma ci ho gia provato!!! E indovina?! il risultato è 65536!!!!!! Scusate ma come si fa a rispondere in questo forum? Riesco solamente a rispondere con i commenti e non ad inserire nuovi post di risposta!! - swet - 26/10/11 16:00
hai aperto una domanda. Caos assicurato :) - Pitagora - 26/10/11 16:02
il primo a confondersi sono proprio io, infatti non mi ero accorto che stavate rispondendo!! :( - swet - 26/10/11 16:41


Yep, I came back :P
PM