Pagina 1 di 1

[C++]Chiarimento interi e troncamento

MessaggioInviato: gio ott 01, 2009 1:24 pm
da rnuzzo
Ciao a tutti,e' da un po di tempo che studio il c++ con l'aiuto di un libro dove ad un certo punto spiega la differenza tra 16 32 e 64 bit.Fin qui tutto chiaro.Dopo chiede perche in un sistema msdos a 16 bit il numero int = 92126 il risultato sara' troncato a ' 26590 '.Qualcuno puo spiegarmi il perche'?
Facendo 92126 - 2659 il risultato e' 65536 che equivale ad un'unsigned short int di 16 bit.
Non riesco proprio a capire.... [boh]

Re: [C++]Chiarimento interi e troncamento

MessaggioInviato: gio ott 01, 2009 2:20 pm
da ghina90
perche se usi un processore con architettura a 16 bit il massimo numero che puoi rappresentare sara dato da 2 elevato alle 16 quindi 65536 e quindi se mettti come dici te int = 92126 il suo valore sara troncato a '26590 ' , mentre se usi un processore con architettura a 32 o 64 bit il massimo numero rappresentabile sara dato da 2 elevato alle 32 e 2 elevato alla 64.
spero di essere stato chiaro.ciao ciao!!

Re: [C++]Chiarimento interi e troncamento

MessaggioInviato: gio ott 01, 2009 2:49 pm
da rnuzzo
Quello che voglio capire e' la relazione matematicache c'è...

Re: [C++]Chiarimento interi e troncamento

MessaggioInviato: gio ott 01, 2009 5:22 pm
da M@ttia
rnuzzo ha scritto:Quello che voglio capire e' la relazione matematicache c'è...

92126 mod 65536 = 2659, ovvero sottrai 65536 dal tuo numero tante volte, finché il risultato è compreso fra 0 e 65535

(vedila come un orologio, dove ogni 12 si riparte da zero: per un processore a 16 bit, ogni 2^16( =65536) si ricomincia da zero a contare (si dice che si ha avuto un overflow, ovvero ho sforato il massimo e quindi ricomincia a contare da zero come in un orologio) [^]

Re: [C++]Chiarimento interi e troncamento

MessaggioInviato: gio ott 01, 2009 6:30 pm
da Xero
M@ttia ha scritto:
rnuzzo ha scritto:Quello che voglio capire e' la relazione matematicache c'è...

92126 mod 65536 = 2659, ovvero sottrai 65536 dal tuo numero tante volte, finché il risultato è compreso fra 0 e 65535

(vedila come un orologio, dove ogni 12 si riparte da zero: per un processore a 16 bit, ogni 2^16( =65536) si ricomincia da zero a contare (si dice che si ha avuto un overflow, ovvero ho sforato il massimo e quindi ricomincia a contare da zero come in un orologio) [^]

In questo caso il numero troncato viene visto come 26590 oppure c'è un carattere addizionale o qualcosa di simile che indica alla macchina che quel numero non è realmente 26590 ma 2^16+26590?

Re: [C++]Chiarimento interi e troncamento

MessaggioInviato: gio ott 01, 2009 6:39 pm
da rnuzzo
Ora mi e' chiaro [grazie] di tutto.

Re: [C++]Chiarimento interi e troncamento

MessaggioInviato: gio ott 01, 2009 8:14 pm
da M@ttia
Xero ha scritto:In questo caso il numero troncato viene visto come 26590 oppure c'è un carattere addizionale o qualcosa di simile che indica alla macchina che quel numero non è realmente 26590 ma 2^16+26590?
Il numero viene visto come quel numero e basta, poi eventualmente si possono aggiungere al codice istruzioni addizionali per segnalare quando accade un qualsiasi overflow a run-time, ma questi poi sono dettagli che dipendono dall'implementazione, dal linguaggio, ecc. A priori un numero ottenuto con overflow o un numero già così di partenza sono uguali.

Re: [C++]Chiarimento interi e troncamento

MessaggioInviato: gio ott 01, 2009 9:31 pm
da Xero
M@ttia ha scritto:
Xero ha scritto:In questo caso il numero troncato viene visto come 26590 oppure c'è un carattere addizionale o qualcosa di simile che indica alla macchina che quel numero non è realmente 26590 ma 2^16+26590?
Il numero viene visto come quel numero e basta, poi eventualmente si possono aggiungere al codice istruzioni addizionali per segnalare quando accade un qualsiasi overflow a run-time, ma questi poi sono dettagli che dipendono dall'implementazione, dal linguaggio, ecc. A priori un numero ottenuto con overflow o un numero già così di partenza sono uguali.

Perfetto, grazie Mat [^]

Re: [C++]Chiarimento interi e troncamento

MessaggioInviato: gio ott 01, 2009 10:15 pm
da Zane
Ehm, faccio appello a tutta la mia memoria di calcolo numerico per fare una figura di cacca e chiedere: ma la rappresentazione non dovrebbe essere comprensiva anche dei negativi? se non sbaglio, a meno che il dato non sia dichiarato come unsigned int, a 16 bit dovrebbe arrivare solamente fino a 32 767 (ovvero 65536/2-1 che è lo zero).

Dico male?

Re: [C++]Chiarimento interi e troncamento

MessaggioInviato: ven ott 02, 2009 7:28 am
da M@ttia
Zane ha scritto:ma la rappresentazione non dovrebbe essere comprensiva anche dei negativi? se non sbaglio, a meno che il dato non sia dichiarato come unsigned int, a 16 bit dovrebbe arrivare solamente fino a 32 767 (ovvero 65536/2-1 che è lo zero).
Ah sì certo, è che visto il calcolo che ha postato all'inizio:
rnuzzo ha scritto:Facendo 92126 - 2659 il risultato e' 65536 che equivale ad un'unsigned short int di 16 bit.
ho subito inteso che stessimo parlando di unsigned int. Nel caso dell'int invece, il primo dei 16 bit è dedicato al segno del numero (1=+, 0=- mi pare), pertanto il massimo numero rappresentabile (in valore assoluto) è 2^(16-1), ovvero 2^15 = 32768 (su un sistema a 16 bit). [^]

Re: [C++]Chiarimento interi e troncamento

MessaggioInviato: ven ott 02, 2009 9:02 am
da Zane
Hai ragione tu come al solito, non avevo notato che si parlava esplicitamente di unsigned nel messaggio originale [:-H]

Grazie per avermelo fatto notare [std]

Re: [C++]Chiarimento interi e troncamento

MessaggioInviato: ven ott 02, 2009 2:24 pm
da eDog
Zane ha scritto:Ehm, faccio appello a tutta la mia memoria di calcolo numerico per fare una figura di cacca e chiedere: ma la rappresentazione non dovrebbe essere comprensiva anche dei negativi? se non sbaglio, a meno che il dato non sia dichiarato come unsigned int, a 16 bit dovrebbe arrivare solamente fino a 32 767 (ovvero 65536/2-1 che è lo zero).

Dico male?


Anche a me hanno spiegato così, quando l'anno scorso abbiamo studiato i tipi di dato.. [std]