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.