Login Esegui login | Non sei registrato? Iscriviti ora (è gratuito!)
Username: Password:
  • Annuncio Pubblicitario

[C++]Chiarimento interi e troncamento

Il forum per tutti i developer. Leggere attentamente il regolamento di sezione prima di postare.

[C++]Chiarimento interi e troncamento

Messaggioda rnuzzo » gio ott 01, 2009 1:24 pm

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]
Avatar utente
rnuzzo
Neo Iscritto
Neo Iscritto
 
Messaggi: 3
Iscritto il: mar set 29, 2009 12:29 am

Re: [C++]Chiarimento interi e troncamento

Messaggioda ghina90 » gio ott 01, 2009 2:20 pm

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!!
Se pensate che la matematica sia difficile, è perché non vi rendete conto di come sia difficile la vita.
Avatar utente
ghina90
Senior Member
Senior Member
 
Messaggi: 492
Iscritto il: ven set 05, 2008 2:00 pm
Località: Firenze

Re: [C++]Chiarimento interi e troncamento

Messaggioda rnuzzo » gio ott 01, 2009 2:49 pm

Quello che voglio capire e' la relazione matematicache c'è...
Avatar utente
rnuzzo
Neo Iscritto
Neo Iscritto
 
Messaggi: 3
Iscritto il: mar set 29, 2009 12:29 am


Re: [C++]Chiarimento interi e troncamento

Messaggioda M@ttia » gio ott 01, 2009 5:22 pm

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) [^]
</IE><FIREFOX>
Avatar utente
M@ttia
Moderatore
Moderatore
 
Messaggi: 8363
Iscritto il: lun giu 09, 2003 2:18 pm
Località: Ticino - Estero

Re: [C++]Chiarimento interi e troncamento

Messaggioda Xero » gio ott 01, 2009 6:30 pm

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?
twitter → http://twitter.com/Maurizio_D

«L'innovazione è una questione di priscio.» A. D'elia
Avatar utente
Xero
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 5145
Iscritto il: mar giu 27, 2006 8:37 pm
Località: Provincia Di Matera / Bari

Re: [C++]Chiarimento interi e troncamento

Messaggioda rnuzzo » gio ott 01, 2009 6:39 pm

Ora mi e' chiaro [grazie] di tutto.
Avatar utente
rnuzzo
Neo Iscritto
Neo Iscritto
 
Messaggi: 3
Iscritto il: mar set 29, 2009 12:29 am

Re: [C++]Chiarimento interi e troncamento

Messaggioda M@ttia » gio ott 01, 2009 8:14 pm

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.
</IE><FIREFOX>
Avatar utente
M@ttia
Moderatore
Moderatore
 
Messaggi: 8363
Iscritto il: lun giu 09, 2003 2:18 pm
Località: Ticino - Estero

Re: [C++]Chiarimento interi e troncamento

Messaggioda Xero » gio ott 01, 2009 9:31 pm

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 [^]
twitter → http://twitter.com/Maurizio_D

«L'innovazione è una questione di priscio.» A. D'elia
Avatar utente
Xero
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 5145
Iscritto il: mar giu 27, 2006 8:37 pm
Località: Provincia Di Matera / Bari

Re: [C++]Chiarimento interi e troncamento

Messaggioda Zane » gio ott 01, 2009 10:15 pm

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?
Avatar utente
Zane
MLI Hero
MLI Hero
 
Messaggi: 7935
Iscritto il: lun ago 05, 2002 9:36 am
Località: Ferrara

Re: [C++]Chiarimento interi e troncamento

Messaggioda M@ttia » ven ott 02, 2009 7:28 am

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). [^]
</IE><FIREFOX>
Avatar utente
M@ttia
Moderatore
Moderatore
 
Messaggi: 8363
Iscritto il: lun giu 09, 2003 2:18 pm
Località: Ticino - Estero

Re: [C++]Chiarimento interi e troncamento

Messaggioda Zane » ven ott 02, 2009 9:02 am

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]
Avatar utente
Zane
MLI Hero
MLI Hero
 
Messaggi: 7935
Iscritto il: lun ago 05, 2002 9:36 am
Località: Ferrara

Re: [C++]Chiarimento interi e troncamento

Messaggioda eDog » ven ott 02, 2009 2:24 pm

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]
eDog,
"È meglio essere temuti o rispettati? Io dico: è troppo chiedere entrambe le cose?" - Tony Stark
Avatar utente
eDog
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 3679
Iscritto il: sab dic 30, 2006 7:58 pm
Località: Vescovana (Padova)


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti

Powered by phpBB © 2002, 2005, 2007, 2008 phpBB Group
Traduzione Italiana phpBB.it

megalab.it: testata telematica quotidiana registrata al Tribunale di Cosenza n. 22/09 del 13.08.2009, editore Master New Media S.r.l.; © Copyright 2008 Master New Media S.r.l. a socio unico - P.I. 02947530784. GRUPPO EDIZIONI MASTER Spa Tutti i diritti sono riservati. Per la pubblicità: Master Advertising