Newsgroup: it.comp.lang.c++
Titolo: Range delle variabili

Salve,
domanda da niubbo: se ho
unsigned char x = 0;
e la incremento in questo modo:
for (unsigned short int i = 0; i < 500; i++)
{
  x++;
}
vedo che x una volta raggiunta la soglia di 255 si riazzera...ma a 
livello di memoria cosa succede? Voglio dire esiste una sorta di riporto 
che va ad inficiare il byte di memoria accanto alla locazione di x?
Saluti,

exit(0) ha scritto:

no,
E.

?manu* ha scritto:

aggiungo: anzi, gli unsigned vengono anche usati con il proposito di 
avere un'artimetica modulare. Dunque incrementare un unsigned char(255) 
non va interpretato come un comportamento anomalo.
E.

 che va ad inficiare il byte di memoria accanto alla locazione di x?
No, va in un flag del processore, che puoi usare in assembler (e forse
in c/c++). Per lui il risultato è zero. Punto.
Tanto per approfondire, 2^8 = 256 (ovvero da 0 a 255). Il processore fa
la somma 255 + 1 a 8 bit, e siccome non può prendere il 9 bit in più, lo
spara in una zona che può essere usata per vedere cosa è successo
durante l'operazione precedente (il famoso registro dei flag).
Enrico

 durante l'operazione precedente (il famoso registro dei flag).
Grazie 1000 ad entrambi! ;-)

Enrico Bassetti ha scritto:

Ci sono dei processori che fanno le somme a 8 bit? Io penso che la somma 
venga comunque fatta sui 32 bit... poi i bit in eccesso vengono 
cancellati con un AND.
E.

 E.

 cancellati con un AND.
Beh, quello ovviamente è un sistema ideale... ovvio che nello specifico
se conviene (spazio? velocità? energia?) si implementa solo la parte a
32 bit e poi si fanno i "magheggi" sui risultati ;-)
Enrico

 cancellati con un AND.
I microprocessori a 8 bit esistono ancora. E non sono una fetta
marginale, anzi. Si pensi ai microprocessori dedicati al controllo delle
lavastoviglie, tanto per spararne una a caso. Non penserete mica che
siano Pentium Centrino? :P
E si, anche questi si possono programmare in C++, anche se la cosa più
frequente è il C o l'asm. Si pensi alla famiglia microchip PIC e ai vari
linguaggi di supporto. Tante volte il linguaggio C/C++ non è proprio
standard ma ha delle estensioni in questi ambiti.

   
Mah! i PIC no di sicuro, in quanto agli altri 8 bit dubito che siano
programmati in C++, che tra l' altro, sarebbe l' EC++ (Embedded C++)
che e' una riduzione (legale) del C++.
Per avr gira un egcc++ , ma esaurisce le risorse dopo un main e 4 righe di
codice...credo non sia mai stato usato.
Neanche in ambito 16bit ho visto girare EC++... direi che la CPU 
dovrebbe essere
almeno un 32bit per suportare queste funzioni :-)
B.
Qua il ref
http://www.caravan.net/ec2plus/

 almeno un 32bit per suportare queste funzioni :-)
Iniziai a programmare in C++ quando il 386 era un bel miraggio (per me
almeno). In ogni caso non credo (ma potrei sbagliare) che ci sia
qualcosa nello standard che impedisca di implementare il c++ su
processori con meno di 32 bit. Anzi.
Tra l'altro vedo che in passato qualche prova di compilatore C++ per pic
c'era...
In ogni caso, si parla di implementazioni specifiche.

   
Appunto: ECC e'  la riduzione C++ per embedded, ma e' ancora troppo
corposo per essere supportata da risorse attualmente presenti nei 16bit
figuriamoci negli 8bit.
B