56 lines
1.3 KiB
C
56 lines
1.3 KiB
C
#include <stdio.h>
|
|
|
|
/* Define some bits to represent various flags */
|
|
#define BIT_USED (1U << 0)
|
|
#define BIT_FREE (1U << 1)
|
|
#define BIT_TAINT (1U << 2)
|
|
#define BIT_DIRTY (1U << 3)
|
|
|
|
/* Modifies in-place */
|
|
#define BIT_SET_NTH(N, K) (N |= (1 << (K - 1)));
|
|
#define BIT_CLEAR_NTH(N, K) (N &= (~(1 << (K - 1))))
|
|
#define BIT_TOGGLE_NTH(N, K) (N ^= (1 << (K - 1)))
|
|
#define BIT_TEST_NTH(N, K) (N & (1 << (K - 1)))
|
|
|
|
#define BIT_SET(N, K) (N |= (K))
|
|
#define BIT_CLEAR(N, K) (N &= ~(K))
|
|
#define BIT_TOGGLE(N, K) (N ^= (K))
|
|
#define BIT_TEST(N, K) (N & K)
|
|
|
|
int main(void) {
|
|
char flags = 0;
|
|
|
|
/* Set a set of flags */
|
|
flags |= BIT_USED | BIT_TAINT;
|
|
printf("Flags: %.8b\n", flags);
|
|
|
|
/* Unset a set of flags */
|
|
flags &= ~BIT_USED;
|
|
printf("Flags: %.8b\n", flags);
|
|
|
|
/* Toggle a bit */
|
|
flags ^= BIT_USED;
|
|
printf("Flags: %.8b\n", flags);
|
|
|
|
if (flags & BIT_USED)
|
|
printf("Bit is used!\n");
|
|
|
|
/* Clear all bits except */
|
|
flags &= BIT_USED;
|
|
printf("Flags: %.8b\n", flags);
|
|
|
|
/* Wipe flags */
|
|
flags = 0;
|
|
|
|
BIT_TOGGLE(flags, BIT_USED);
|
|
printf("Flags: %.8b\n", flags);
|
|
|
|
BIT_SET(flags, BIT_DIRTY | BIT_TAINT);
|
|
printf("Flags: %.8b\n", flags);
|
|
|
|
if (BIT_TEST(flags, BIT_DIRTY))
|
|
printf("Bit is dirty!\n");
|
|
|
|
BIT_CLEAR(flags, BIT_DIRTY | BIT_USED | BIT_TAINT);
|
|
printf("Flags: %.8b\n", flags);
|
|
}
|