Newsgroup: it.comp.lang.c++
Titolo: cosa vuol dire?

con:
unsigned long *s, saddr, src[1024]
l'istruzione:
s = (unsigned long *)(src + (saddr >> 5));
cosa vuol dire? s diventa il puntatore a cosa? al risultato della somma src
+ (saddr >> 5) ? non capisco
grazie

 src + (saddr >> 5) ? non capisco
"s" punterà all'elemento (saddr/32)-esimo del vettore src.
Se saddr vale "320", s punterà all'elemento src[10].
Ciao!
-- 
---
*************** | Have you ever retired a human by mystake?
*** Azathot *** |
*************** | To contact me, ask me gently. Thanks.

 
Ciao Azathot.
Mi spieghi come mai 
saddr >> 5
equivale a 
saddr/32
?
Grazie
Alex

 saddr/32
Semplice. In generale[1]
        A >> b
con "A" scalare intero di "n" bit e "b" numero intero con 
        0 <= b <= n
significa "sposta la rappresentazione binaria del numero A di 'b' bit a 
destra". Lo spostamento verso destra in base due equivale, matematicamente 
parlando, ad una divisione per due elevato a "b". Ovvero vale la seguente 
equivalenza:
        A >> b          <=>             A / (2^b)
Ovviamente, la seconda espressione è molto più lenta a calcolarsi della 
prima per un processore, da cui l'uso frequente della prima forma.
Per i dettagli sull'operatore ">>", ti consiglio un buon testo di C++. Per i 
dettagli matematici sottesi all'equivalenza, ti consiglio un buon testo di 
matematica. ;-)
Ciao!
-- 
[1] A meno di sovraccarichi ovvero di ridefinizioni dell'operatore ">>".


 ha scritto nel messaggio
news:8zr3b.55986$sj6.1...@tornado.fastwebnet.it...


 ok. capisci un pò di DLX?
Mai sentito.
Ciao!
-- 
P.S. Quota meglio!


 > ok. capisci un pň di DLX?


 *s++ (punta all'elemento successivo dell'array?)
L'operatore "++" ha una associatività a sinistra più elevata dell'operatore 
di referenziazione ("*"). Quindi
        *s++
va letto come
        *(s++)
da cui, se usato così, ad esempio:
        unsigned long pippo = *s++;
allora "pippo" conterrà il valore puntato da "s", mentre "s" punterà 
all'elemento successivo.
Se usato da solo, cioè senza assegnazione, è equivalente a
        s++
dato che *s non viene usato e quindi viene buttato via.
Ciao!
-- 


 wrote in message
UXF3b.56648$sj6.1...@tornado.fastwebnet.it...


 0xffffffff viene interpretato con segno?
Dipende da chi lo "riceve"...
PS: un buon testo di C no? :) 
-- 
Luc.

  (unsigned)0xffffffff
0xffffffff viene interpretato con segno per default. Quindi il compilatore 
ti dovrebbe avvisare, con un warning, che la costante ha superato 
l'ampiezza di rappresenzatione (ammesso che il tipo integer abbia 32 bit).
Per avere la costante unsigned, puoi fare sia
        (unsigned int) 0xffffffff;
che
        0xffffffffU


 abbia 32 bit). 
Io non sono daccordo. 0xFFFFFFFF viene interpretato con segno se 
confrontato con una variabile con segno, altrimenti no.
Vuoi forse dirmi che se io faccio:
unsigned int a;
if (a == 0xFFFFFFFF)
....
il compilatore dovrebbe darmi un warning ? 

Ciao Matteo,
Per DLX intendi il processore Deluxe (illustrato sul libro Patterson)?
Se si
   posso darti qualche dritta visto che anni or sono ho sviluppato un
emulatore di DLX
Se no
   come non detto...ciao!!
Ciao ciao
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha scritto nel messaggio
news:78e8c12d2d7d92a51b7...@mygate.mailgate.org...
