Newsgroup: it.comp.lang.visual-basic
Titolo: numero a 32 bit

un valore Long č un numero a 32 bit... ma allora perche non arriva fino a
2^31? bensi solo a 2^31 -1 ??
in realta 2^31 -1 č u nnumero in cui i bit sono 31, non 32, perche il 31°
non lo puoi prendere in considerazione (deve essere sempre 0), č cosě ?
grazie
MarioH

non lo puoi prendere in considerazione (deve essere sempre 0), è così ?
perche' e' un tipo con segno (quindi numeri positivi e negativi) 
sicche' :
0x7FFFFFFF ---> max positivo
0x80000000 ---> max negativo
ciao, hal

 non lo puoi prendere in considerazione (deve essere sempre 0), è così ?
La dimostrazione rigorosa ce l'ho su un libro che studiavo alle superiori
che adesso è su in soffitta... se vuoi lo vado a prendere, comunque in
parole povere (correggetemi se ricordo male), sarebbero 2^32 configurazioni
possibili (e quindi numeri) se il Long non considerasse il segno, mentre in
questo caso le configurazioni vengono divise in due, quelle con segno meno e
quelle con segno + e quindi 2^32/2=2^31, purtroppo però, a causa del
complemento (a 2? non ricordo) cioè l'operazione che trasforma la sequenza
di bit da un valore positivo a negativo, deve tener conto del fatto che lo
zero (0) è compreso una sola volta e quindi inverte tutti i bit e poi somma
uno per evitare il problema del doppio 0, provo a spiegarmi con un esempio
ad 8 bit (quando studiavo c'era il 6502 della MOS Technology).
00000000 è 0... ma va?
00000001 è 1... stupefacente, sono proprio bravo!
se il complemento a 1 (il primo elementare complemento di segno) invertiva
tutti i bit avremmo avuto
11111111 = 0 ma non ha senso perché è una ripetizione.
11111110 = -1.
Col complemento a 2 invece cambi di segno e poi sommi 1
quindi 0 rimane 11111111+1 = 00000000 con il bit di riporto (carry flag del
processore che s'imposta a 1)
e il -1 diventa la configurazione 11111111.
Se verifichi tutto questo ottieni che un intero a 8 bit al massimo
rappresenta da -128 a +127, e quindi 2^7-1
Spero di aver chiarito... mah.
Ciao.

 --
ah gia il segno... !!
per "primo bit" intendi quello piu a destra, vero? cioe il segno occupa il
posto che dovrebbe occupare 2^31 ?
se č cosě... ora sě che č tutto chiaro...
thank you
MarioH

 il bit 31 (ossia il 32simo da destra a sinistra).
E sě... l'intel lavora al contrario!
Cha accoppiata: Intel + M$ :(
Ciao

 Ciao
Spero sia una battuta...
                                    danilo


Non facciamo confusione...
A livello di organizzazione in registro, intel e' big endian come il resto
dell'universo, ovvero il numero
01011110 11111001
ha il MSB a 0 il LSB a 1; se poi vai a guardarlo in memoria, noterai che la
faccenda si inverte, ovvero il byte con indirizzo basso conterra' la parte
meno significativa della word, quello con indirizzo piu' alto la parte piu'
significativa.
Questo per permettere una facile estensione, in pratica se ti serve un
numero piu' alto ti prendi altri bit a sinistra.
Con il sistema big endian, invece, che e' quello che usiamo quando
scriviamo, se ti serve un numero piu' alto devi spostarti verso sinistra, in
pratica occupare bit piu' bassi.
Se inizi a scrivere al bordo del foglio (cioe' all'inizio dell'area di
memoria) l'unica soluzione e' riscrivere il numero stando attento a lasciare
piu' spazio a sinistra.
Questo da un lato forma un'immagine della memoria molto piu' human-friendly,
dall'altro per un computer non fa assolutamente differenza e puo' rallentare
alcune operazioni, percui Intel ha pensato che il modo piu' pratico di
organizzare i bit fosse dalla parte a punta :)
Il difetto? Il numero (hex) 12 a5 34 b1 viene scritto in memoria come:
b1 34 a5 12
il che rende piu' complessa la visualizzazione con un debugger da parte di
un umano, e naturalmente obbliga a tenerne conto durante la stesura di
alcuni tipi di codice...
Ciaotutti,
*

 il bit 31 (ossia il 32simo da destra a sinistra).
ah si segnano cosi ? io a sinistra mettevo sempre lo 0...
quante cose si imparano... !!
grazie di nuovo
MarioH

> 
*> Questo per permettere una facile estensione, in pratica se ti serve un
*> numero piu' alto ti prendi altri bit a sinistra.
Questo ragionamento era  valido ai tempi del Vic20  quando avevi 8 bit
in un registro, era tollerabile con le macchine a registri a 16 bit ma
assolutamente  inutile  con  32  bit.   Anche perché  conosco  1  solo
linguaggio con aritmetica intera  con precisione arbitraria, gli altri
usano sempre  una precisione fissa,  quindi il problema del  bordo del
foglio non si presenta.
Ti do  atto che  accedere alla memoria  per indirizzi  decrescenti può
rallentare il discorso rispetto al pattern inverso ma:
	Con gli intel tanto devi fare sempre e comunque dentro 
	e fuori dalla memoria al processore
	Con gli altri puoi giostrarti intelligentemente gli
	accessi e usare più word in modo big endian.
*> dall'altro per  un computer non fa assolutamente  differenza e puo'
*> rallentare alcune operazioni,
?????????????????????????? 
O non fa differenza o rallenta (e fa differenza). Ti spieghi meglio ?
*> percui Intel ha pensato che il modo piu' pratico di
Di rimanete all'età della pietra, casomai.
--
Gian Uberto| main(){printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}
Lauri      |                        David Korn, 1987 ioccc best one liner 
(aka saint)|-------------------------------------------------------------------
em@ail: 
sa...@eng.it
 ( vedere X-nospam nello header - see X-nospam in header )

E' per questo che dicevo spero sia una battuta

 Di rimanete all'età della pietra, casomai.
Beh quando e' nato l'8088 si era nell'eta' della pietra :P
Ricordati che nasceva per essere compatibile (in tutto tranne che nei codici
macchina) con lo Z80!
Ciaotutti,
*

> Di rimanete all'età della pietra, casomai.
*> Beh quando e' nato l'8088 si era nell'eta' della pietra :P
*> Ricordati che nasceva per essere compatibile (in tutto tranne che nei codici
*> macchina) con lo Z80!
Hmmm,  lo  Z80  era  un  processore  che  manteneva  la  compatibilità
(migliorandolo) di un chip intel, credo lo 8008...
Ma oggi  abbiamo una macchina RISC  con un bel numero  di registri cui
però non si può accedere perché si vedono solo i soliti registri...
Vabbé, ci sono cose ancor peggio nella vita...


(migliorandolo) di un chip intel, credo lo 8008...
Perché "era"????
Ora molti elettrodomestici lo usano, e pure il mio PDA.... :-))))
Ciao,
Moreno
--
#sirri#@#morenosoft#.com
(togliete "#" dall'indirizzo)
Moreno Sirri VB Site - 
http://www.msvbsite.net
---------------------------------------------------------------------------
Le risposte alle tue domande le trovi sul Sito Comune di questo NewsGroup:
 
http://www.it-lang-vb.net
---------------------------------------------------------------------------


Se e' per questo lo Z80 guida a tutt'oggi i missili patriot...
Ciaotutti,
*

 Ah, naturalmente questa notazione e' usata per comodita' (?).
La comodità sta nel fatto che sono numerati secondo le potenze di 2
che rappresentano.
-- 
Samuele Battarra
prova il mio newsreader:
http://digilander.iol.it/battarsa/programmi/news/

 diversa (anche tra marche di processori diverse)
E perchè quando l'ho detto io sono stato aggredito?
Ciao