Newsgroup: it.comp.lang.c
Titolo: [?] Cosa significa questa espressione?

Non ho grande esperienza in C ma ho sufficienti capacità nella
programmazione in altri linguaggi.
Su una guida ho trovato del codice, che effettivamente funziona, ma di cui
non ho capito il "senso".
#include blah blah
main()
{
  int a;
  char c;
  blah blah
  c=a&0xff
  blah blah
}
mi sfugge il significato dell'espressione che metto nella variabile c.
in linea teorica & dovrebbe essere l'operatore che evidenzia una posizione
in memoria (se non mi sbaglio &VariabilePuntatore corrisponde alla sua
posizione in memoria mentre *VariabilePuntatore al suo valore, anche se per
ora non ho sperimentato) e quella successiva un indirizzo in memoria ( 0xFF,
esadecimale) ma siccome non ho ferrate conoscenze in microgestione
dell'hardware mi sfugge il senso generale dell'output.
Ho già guardato nei miei due libri (uno sul C e uno sul C++) ma a colpo
d'occhio non c'è niente nell'indice.
(nb,dell'output viene poi usato il suo valore letterale e il corrispondente
codice ascii)

  blah blah
& in questo caso e' un operatore binario bitwise.
Con esso si possono manipolare i singoli bit.
a & 0xff 
costituisce la funzione di and bit a bit tra il contenuto di
"a" e la sequenza di bit 11111111.
Se a fosse uguale a 1233 avresti:
10011010001 & 
00011111111
ovvero :
00011010001 (equivalente a 209 decimale).
--
Andrea Laforgia - walkietalkie(at)
libero.it

No, in questo caso si tratta di un AND logico sulle due variabili.
In pratica viene assegnato a c il valore di a AND 0xFF.
Dome
--
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
PC Brain Official Web Site
http://digilander.iol.it/pcbrain
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

No, in questo caso si tratta di un AND logico sulle due variabili.
Non e' un and logico, e' un and bit a bit.


un int occupa 2 byte giusto?
0xFF invece, mi hai fatto notare che corrispoonde in binario a 11111111? che
in decimale fa 255? (il mio libro di matematica dice la stessa cosa)
Riprendendo quello che mi hai mostrato possiamo fare un AND bit to bit
1011010011001010    AND
0000000011111111    =
0000000011001010
in pratica si perde il primo byte dell'intero mentre il secondo byte rimane
inalterato, il risultato è grande come un byte, molto bello, grazie per la
spiegazione.
Suppongo che mentre & corrisponde ad un && (AND) bit to bit | corrisponde a
|| (OR) bit to bit, è corretto?

|| (OR) bit to bit, è corretto?
Yes.
ciao, acc.   
a...@libero.it

spiegazione.
Il risultato non e' grande come un byte, ma come un intero.


32 bit, occupa 4 byte).
Un errore cosi' grossolano da te non me lo sarei mai aspettato, non ho
parole. Che siano i primi effetti della prolungata convivenza in mezzo
agli 'umani' ?
Ti consiglio un breve periodo di meditazione su Vulcano ;-)
ciao, acc.   
a...@libero.it

 Andrea Laforgia - walkietalkie(at)
libero.it
intendevo dire che il risultato, pur essendo grande come un intero, ha tutti
i byte oltre al primo nulli.
quindi il valore del risultato  (un intero) dopo l'operazione puň essere
contenuto in un char.
mettetetevi d'accordo te e acc.
su di un personal computer come il mio o come il vostro un int occupa 4 o 2
byte?
io ero rimasto cosě:
char 1
int 2
long 4
single 4
double 8
correggetemi se sbaglio
so bene anche io che questi valori possono variare a seconda della
piattaforma.
Peraltro mi sembra che il linux interpreti diversamente il long e l'int

 Ti consiglio un breve periodo di meditazione su Vulcano ;-)
ha ragione Andrea. Lo standard dice esplicitamente che una variabile int 
deve essere quella che offre le migliori prestazioni sulla macchina in 
esame, quindi deve essere grande tanto quanto la parola della macchina.
ciao Anto
-- 
Antonio Cuni, 19 anni, studente
Brainbench C++ Master: 4.6, higher than 98% of all previous test takers.
C Language: 3.32, higher than 79% of all previous test takers.
Guida C/C++ di Programmazione.it: 
http://cpp.programmazione.it

correggetemi se sbaglio
...lo standard non definisce alcun valore preciso per
nessuna piattaforma.
Su una macchina a 16 bit, l'intero occupa 16 bit, su una a
32 bit, l'intero occupa 32 bit, etc...
La dimensione degli int e' uguale a quella della parola
macchina.
Poi, lo standard stabilisce che:
sizeof(char) = 1
sizeof(short) <= sizeof(int) <= sizeof(long)
Se esistesse una macchina con un int di 64 bit, sarebbe del
tutto legale che lo short e il long fossero entrambi lunghi
64 bit.



Molto bello e molto interessante, buono a sapersi, grazie.

esame, quindi deve essere grande tanto quanto la parola della macchina.
Quindi secondo te il mio Turbo C 1.0, se montato su un 386
automaticamente si mette a produrre codice a 32bit ?
ciao, acc.   
a...@libero.it

Peraltro mi sembra che il linux interpreti diversamente il long e l'int
Non ho alcuna esperienza di programmazione in Linux.
ciao, acc.   
a...@libero.it

automaticamente si mette a produrre codice a 32bit ?
No. Ma l'int sarà grande quanto la tua parola macchina. Ecco il succo
del discorso. Quibdi un int, per aderanza allo standard, dovrebbe su
quel calcolatore essere su 32 bit. 
_
Giovanni

automaticamente si mette a produrre codice a 32bit ?
No. Ma l'int sarà grande quanto la tua parola macchina. Ecco il succo
del discorso. Quindi un int, per aderanza allo standard, dovrebbe su
quel calcolatore essere a 32 bit. 
_
Giovanni

quel calcolatore essere a 32 bit. 
no, su quel particolare calcolatore sarà a 32bit... ma per quella
particolare implementazione del compilatore sarà a 16bit (dato che 
il turbo c1.0 é stato fatto per macchine a 16bit)
Antonio Mazzeo

 il turbo c1.0 é stato fatto per macchine a 16bit)
Quando si parla di dimensione dei tipi interi, ci si riferisce sempre,
ovviamente, a compilatori scritti per quei sistemi (a 32 bit su un sistema a 32
bit). Ci si mette, cioe', nelle condizioni migliori e piu' comuni.
-- 
Posted from  [80.105.34.80] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 wrote in message
news:u2c8rtsifa2mffl6a...@4ax.com...

Ed in effetti il compilatore C per il GameBoy (Z80) ha sizeof(int)=1 (e gira
bene sotto win32)....

bene sotto win32)....
Ribadisco: la misura di un intero con un compilatore a 32
bit su una macchina a 32 bit e' 32 bit.


 macchina.
Non capisco che centra la parola macchina.. forse vuoi dire che è uguale a
quella della propria macchina?
--
Luigi
byte...@hotmail.com
http://web.tiscali.it/luigi_web
ICQ #46240443

Non capisco che centra la parola macchina.. 
Leggi il documento standard.


> Leggi il documento standard.
Dove?


bit su una macchina a 32 bit e' 32 bit.
Cosi' va meglio :-)
ciao, acc.   
a...@libero.it

quella della propria macchina?
Un compilatore per processori a 16 bit solitamente usa un int a 16
bit, uno per processori a 32 bit solitamente usa un int a 32 bit, etc.
ciao, acc.   
a...@libero.it

correggetemi se sbaglio
Usa la funzione sizeof e trovali.
Da me un int č 4 byte.
_
Giovanni

In quel senso ;)