Piccolo aiutino sul costrutto enum del C


barzi
 Share

Recommended Posts

Ciao a tutti.

Qualcuno può spiegarmi cosa succede in questo frammento di codice?

enum {   log2size = 3,   size=1 << log2size,   sizemask=size - 1,};

Magari spiegatemi anche a livello di bit cosa succede.

Poi quando io definisco un enum non dovrei darci un nome? Qui perchè non compare?

Ad esempio enum {..., ...., ....., } NOME;

Nel codice di sopra non compare nessun nome. In che caso utilizzo enum in quel modo?

Thanx :)

Ubaldo

--

Link to comment
Share on other sites

Non hai bisogno di specificare per forza un tag per l'enum, né una variabile che lo utilizzi come tipo.

In questo caso, il costrutto definisce semplicemente i simboli "log2size" (che vale 3), "size" (che vale 8) e "sizemask" (che vale 7). Se non mi ricordo male, il compilatore li tratta alla stregua di interi.

Suggerisco ad ogni modo di verificare sul K&R.

Link to comment
Share on other sites

Riguardo ai bit:

l'operatore ">>" shifta a destra tutti i bit del valore alla sua sinistra del numero di bit specificato dal numero alla sua destra. I nuovi bit entranti a sinistra assumono valore 0.

3 >> 2

011 >> 2 = 000

e' la stessa cosa che fare:

3 / (2^n) dove n e' il numero di bit da shiftare

La stessa cosa vale per "<<", in questo caso fa lo shift a sinistra. I nuovi bit entranti a destra assumono valore 0.

3 << 2

011 << 2 = 1100 = 12

e' la stessa cosa che fare:

3 * (2^n)

Per approfondire leggiti come operare sui singoli bit in C, esistono acneh operatori &, |, ^, ~.

Cpu86

Link to comment
Share on other sites

bene bene!!!

E' cio che sono stato a vedere oggi pomeriggio.

Tu mi stai dando proprio ora la conferma ;)

Ah bene... un altro colpo l'ho messo a segno. ;)

Grazie 1k :)

L'unica cosa che nn mi è chiara perchè nel caso che ho postato vengono usati gli enum invece che usare ad esempio int ecc ecc...

Link to comment
Share on other sites

L'unica cosa che nn mi è chiara perchè nel caso che ho postato vengono usati gli enum invece che usare ad esempio int ecc ecc...

Perché all'autore piace di più così, probabilmente per questioni di stile.

Non mi piacerebbe però utilizzare degli int, perché sarebbero piuttosto dele variabili e non delle costanti. Forse è per quello che l'autore ha preferito l'enum (difatti in questo caso, log2size non è per esempio modificabile).

Userei probabilmente di #define in ANSI C, oppure dichiarerei delle costanti in C++, oppure userei static final in Java.

Sono scelte dettate in base al proprio gusto e stile di programmazione.

Link to comment
Share on other sites

All'autore piace cosi...

Se la prima costante vale 3 gli serve che le rimanenti due assumano i valori rispettati dallo shift dei bit e la sottrazione di uno ..

Supponiamo che un dì gli serva che si parti da una variabile con valore 4... Non saremo noi a calcolare le rimanenti due enum...

Oppure voleva far vedere un caso limite di gestione dell'enum!

ciao

:D

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share