bitove pole, pole bitu

Jan Waclawek konfera@efton.sk
Úterý Leden 27 11:40:22 CET 2009


Zoberie (bez typedef, samozrejme); problemom je, ze takto to ma pomerne maly vyznam lebo s fixnym indexom to nie je problem zapisat priamo (array_of_bit.tmp5).

Povodny problem je vsak zrejme mat variabilny index. Tiez sa na to daju napisat makra typu

uint8_t bit_array[kolko_treba];  

#define get_bit(n) ((bit_array[(n) / 8] & (1 << (n) % 8)) ? 1 : 0)
#define put_bit(n, b) {if (b) bit_array[(n) / 8] &= (1 << (n) % 8)) ; else bit_array[(n) / 8] |= (1 << (n) % 8));}

ale nie je to bohvieako pruzne a tiez to je implementacne zavisle.


wek


----- Original Message ---------------

Subject: Re: bitove pole, pole bitu
   From: Josef Stengl <ok1ced@nagano.cz>
   Date: Tue, 27 Jan 2009 11:24:54 +0100
     To: HW-news <hw-list@list.hw.cz>

>Obávám se, ¾e to není mo¾né. C99 specifikace to podle mì nezná.
>
>Mozna preze makro?
>
>typedef struct{
>  unsigned char tmp1:1;
>  unsigned char tmp2:1;
>...
>  unsigned char tmp20:1;
>}array_of_bit;
>
>#define bit_array(n) array_of_bit.tmp ## n
>
>bit_array(5) = 1;
>...
>
>Je to takovy napad, nevim jestli to bude oprabdu fungovat. Na vyzkouseni 
>bohuzel nemam cas a hlavne stroj.
>Docela by me zajimalo, jestli by to fungovalo.
>ced
>
>
>
>co¾ ale není to co jste chtìl.... (a pravdìpodobnì to stejnak víte)
>ced
>
>
>Lubo¹ Melichar wrote:
>> Zdravim,
>> znam a pouzivam bitova pole ve strukture..
>>
>> typedef struct{
>>   unsigned char tmp1:1;
>>   unsigned char tmp2:2;
>> ..
>> }
>>
>> ale potreboval bych ve strukture mit pole bitu..
>> nespravne jsem se to pokousel zapsat nasledovne..
>>
>> typedef struct{
>>   unsigned char tmp[20]:1;
>> }
>>
>>
>> prekladac(codevision) je proti, dekuji za nakopnuti..
>>
>>   
>
>_______________________________________________
>HW-list mailing list  -  sponsored by www.HW.cz
>Hw-list@list.hw.cz
>http://list.hw.cz/mailman/listinfo/hw-list



Další informace o konferenci Hw-list