neděle 27. června 2010

C/C++: Makra pro bitové operace

#define BIT(x) (1 << (x))
#define SETBITS(x,y) ((x) |= (y))
#define CLEARBITS(x,y) ((x) &= (~(y)))
#define SETBIT(x,y) SETBITS((x), (BIT((y))))
#define CLEARBIT(x,y) CLEARBITS((x), (BIT((y))))
#define BITSET(x,y) ((x) & (BIT(y)))
#define BITCLEAR(x,y) !BITSET((x), (y))
#define BITSSET(x,y) (((x) & (y)) == (y))
#define BITSCLEAR(x,y) (((x) & (y)) == 0)
#define BITVAL(x,y) (((x)>>(y)) & 1)
Osobně mi nepřirostly k srdci a nějak jsem si je prostě nezvykl používat. Několikrát jsem jim dával šanci, ale dopadlo to tak, že někde jsem použil makro, někde zapomněl a maskoval. To druhé zejména při vícenásobném nahazování nebo shazování bitů, kde je jednořádková maska určitě přehlednější a úspornější. Teď už beru pokaždé kousek papíru, načmárám si těch pár jedniček a nul a.. ..a je to :D

Žádné komentáře:

Okomentovat