This commit is contained in:
Imbus 2025-11-27 11:41:03 +01:00
parent 561a344f30
commit 45ef1c4271

56
bitmanip.c Normal file
View file

@ -0,0 +1,56 @@
#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);
}