[elektro] C kérdés
Acs Gabor
agabor at electrodesign.hu
Wed Sep 23 14:53:14 CEST 2009
Nem lenne jó egy asm betét? Mivel ott van bit test parancs.
Gábor
2009.09.23. 14:40 keltezéssel, Ágó István írta:
> Ü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 :-)
> -----------------------------------------
> elektro[-flame|-etc]
More information about the Elektro
mailing list