[elektro] C kérdés

Ágó István ago.istvan at gmail.com
Wed Sep 23 14:39:56 CEST 2009


Üdv mindenkinek

Kellene csinálni egy makrót egy változó adott bitjének vizsgálatára, de
minél gyorsabb kellene, hogy legyen, mert sokszor fut le sok darab belőle
egymás után. A változó 16 bites tipus, az egyszerű if (valtozo&(1<<bit))
sajnos nem ad optimális kódot. Ha viszont castolom a változót és a megfelelő
"részre" használom az &(1<<bit) műveletet, akkor már azt kapom, amit
szeretnék. Tehát valami ilyesmire lenne szükségem:

#define bit_test(valtozo,bit)    (#if (bit>7) (*((unsigned
char*)((&valtozo)+1))&(1<<(bit-8))) #else (*((unsigned
char*)valtozo)&(1<<bit)) #endif)

Tehát ha b értéke nagyobb mint hét, akkor a valtozo felső bájtján végezzen
&(1<<(bit-8)) műveletet, ha viszont kisebb mint hét, akkor az alsó bájtján
&(1<<bit) műveletet. Használata egyszerűen if (bit_test(valtozo, bit))
formában lenne. Csakhogy a fentit nem fogadja el a fordító (C18), egyszerűen
syntax errorral honorálja. bit értéke a kódban fix szám, tehát nem futás
közban akarok oda valamit berakni, hanem a preproceszor már ismert számmal
dolgozna. Természetesen berakhatnám minden sorba az odavaló bitvizsgálatot,
de az bántja a szememet :-)


More information about the Elektro mailing list