/* Bit Operation macros */
#define sbi(b,n) ((b) |= (1<<(n))) /* Set bit number n in byte b */
#define cbi(b,n) ((b) &= (~(1<<(n)))) /* Clear bit number n in byte b */
#define rbi(b,n) ((b) & (1<<(n))) /* Read bit number n in byte b */
#define fbi(b,n) ((b) ^= (1<<(n))) /* Flip bit number n in byte b */
#define bit_is_set(b,n) (b & (1<<n)) /* Test if bit number n in byte b is set */
#define bit_is_clear(b,n) (!(b & (1<<n))) /* Test if bit number n in byte b is clear */
void main(void)
{
uint8_t dip8;
sbi(dip8, 0); /* Set bit number 0 */
cbi(dip8, 7); /* Clear bit number 7 */
fbi(dib8, 4); /* Flip bit number 4 */
if(bit_is_set(dip8, 0))
{
/* Bit number 0 was set */
}
if(bit_is_clear(dip8, 2))
{
/* Bit number 2 was clear */
}
}