[elektro] C kérdés

Fuzesi Arnold arnold.fuzesi.lista at gmail.com
Wed Sep 23 17:23:08 CEST 2009


16 bitesre ott sincs.
Ha meg van akkor a fordito is azt forditja.

-

István, amit akarsz az nem hordozható kódot generál.

A megoldas:
(uchar*)&valtozo[x];

ahol x [0;1] 16 bites valtozo eseten... igy tudod byteosan cimezni.

A.
On 2009. 09. 23. 14:53, Acs Gabor wrote:
> 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]
> -----------------------------------------
>           elektro[-flame|-etc]



More information about the Elektro mailing list