C
Beginner
1 min read
Bitwise Operators
Example
#include <stdio.h>
/* Define flag bits using left-shift */
#define FLAG_READ (1 << 0) /* bit 0: 0000 0001 */
#define FLAG_WRITE (1 << 1) /* bit 1: 0000 0010 */
#define FLAG_EXEC (1 << 2) /* bit 2: 0000 0100 */
void print_binary(unsigned int n)
{
for (int i = 7; i >= 0; i--)
putchar((n >> i) & 1 ? '1' : '0');
putchar('\n');
}
int main(void)
{
unsigned int a = 0b00001100; /* 12 */
unsigned int b = 0b00001010; /* 10 */
printf("a & b = %u -> ", a & b); print_binary(a & b); /* 8 */
printf("a | b = %u -> ", a | b); print_binary(a | b); /* 14 */
printf("a ^ b = %u -> ", a ^ b); print_binary(a ^ b); /* 6 */
printf("~a = %u -> ", ~a & 0xFF); print_binary(~a & 0xFF);
printf("a << 2 = %u -> ", a << 2); print_binary(a << 2); /* 48 */
printf("a >> 1 = %u -> ", a >> 1); print_binary(a >> 1); /* 6 */
/* Flags example */
unsigned int perms = FLAG_READ | FLAG_WRITE;
printf("\nRead? %s\n", (perms & FLAG_READ) ? "yes" : "no");
printf("Write? %s\n", (perms & FLAG_WRITE) ? "yes" : "no");
printf("Exec? %s\n", (perms & FLAG_EXEC) ? "yes" : "no");
perms |= FLAG_EXEC; /* set exec bit */
perms &= ~FLAG_WRITE; /* clear write bit */
printf("After update — Write? %s Exec? %s\n",
(perms & FLAG_WRITE) ? "yes" : "no",
(perms & FLAG_EXEC) ? "yes" : "no");
return 0;
}