Peter Brixen wrote:
> (Rimelig nybegynder i C). Jeg har lidt svært ved at forstå nogle ting
> vedrørende bits. Fx. har jeg stødt på dette eksempel:
>
> #define DB_MARKED ((unsigned)1 << ((sizeof(unsigned) * 8) - 1))
> #define DB_INDEX_MASK (~DB_MARKED)
>
> De bruges til en unsigned værdi, fx. som her:
>
> dp->db_index[db_idx + 1] |= DB_MARKED;
>
> Hvorfor bruges netop disse værdier og ikke bare 0x01, 0x02 eller 1, 2
> osv.?
>
> Generelt er jeg forvirret, og mangler noget overblik, så noget indsigt
> og visdom ville være dejligt...
>
DB_MARKED sætter det øverste bit (MSB) i en unsigned (int), forudsat at
en char har 8 bit.
DB_INDEX_MASK kan bruges til at resete (cleare) det øverste bit, eller
vælge de øvrige bits.
Det er svært at gætte hvorfor man vælger MSB, ud fra den kode du har
vist, men det er muligt at man bruger de øvrige bits til "et eller
andet", f.ex et index.
/b
--
Bertel Brander, author of Wain, a free text editor for programmers:
http://home20.inet.tele.dk/midgaard/program.htm