Bitwise Masking & Flags - Complete Examples
Store 32 boolean flags in one int using bit positions.
Operations: SET (|), CLEAR (&~), TOGGLE (^), TEST (&)
1. Define Permission Flags
C
User permission constants
#define READ 0x01 // 00000001
#define WRITE 0x02 // 00000010
#define EXEC 0x04 // 00000100
#define DELETE 0x08 // 00001000
#define ADMIN 0x10 // 00010000
#define USER 0x20 // 00100000
int user_perms = 0; // Start with no permissions
2. SET Flags (OR = |)
C
Grant permissions
user_perms |= READ | WRITE; // 00000011
user_perms |= ADMIN; // 00010011
// Can combine multiple:
user_perms |= (EXEC | DELETE); // 00011011
3. TEST Flags (AND = &)
C
Check permissions
if (user_perms & READ)
printf("Can read files\n");
if (user_perms & ADMIN)
printf("Admin access\n");
// Multiple checks:
if ((user_perms & (READ | WRITE)) == (READ | WRITE))
printf("Full RW access\n");
4. CLEAR Flags (AND NOT = &~)
C
Revoke permissions
user_perms &= ~WRITE; // Remove WRITE: 00010001
user_perms &= ~DELETE; // Remove DELETE: 00010001
// Clear multiple:
user_perms &= ~(READ | WRITE | EXEC);
5. TOGGLE Flags (XOR = ^)
C
Flip permission state
user_perms ^= READ; // Toggle READ
user_perms ^= ADMIN; // Toggle ADMIN
// Toggle multiple:
user_perms ^= (WRITE | EXEC);
6. Complete Permissions System
C
Full working example
#include <stdio.h>
#define READ 0x01
#define WRITE 0x02
#define EXEC 0x04
#define ADMIN 0x10
int main() {
int user = 0;
// Grant permissions
user |= (READ | WRITE | EXEC);
printf("User: 0x%02X\n", user); // 0x07
// Test
printf("Can read: %s\n", (user & READ) ? "YES" : "NO");
// Revoke EXEC
user &= ~EXEC;
printf("After revoke EXEC: 0x%02X\n", user); // 0x03
// Toggle ADMIN
user ^= ADMIN;
printf("Final: 0x%02X\n", user); // 0x13
return 0;
}
Output shows flag states changing.
7. Bitwise Operations Summary
TEXT
Flag operation cheat sheet
SET flag: flags |= MASK
CLEAR flag: flags &= ~MASK
TOGGLE flag: flags ^= MASK
TEST flag: if (flags & MASK)
ALL flags: (flags & MASK) == MASK
Conclusion
Mastered bitwise flags! One int = 32 booleans.
Perfect for permissions, settings, hardware control.
Codecrown