Bit masks let one integer store several yes/no flags.

mask A mask selects one bit position with a value such as `1`, `2`, or `4`.
flag test The `&` operator checks whether a selected bit is present.

Flag Masks

flags
flag_masks.c
Replay: real traced execution (multi-file project)
#include <stdio.h>

int main(void) {
    int flags = 5;
    int canRead = (flags & 1) != 0;
    int canWrite = (flags & 2) != 0;
    int canRun = (flags & 4) != 0;

    printf("read=%d write=%d run=%d\n", canRead, canWrite, canRun);
    return 0;
}
#include <stdio.h>

int main(void) {
    int flags = 2;
    int canRead = (flags & 1) != 0;
    int canWrite = (flags & 2) != 0;
    int canRun = (flags & 4) != 0;

    printf("read=%d write=%d run=%d\n", canRead, canWrite, canRun);
    return 0;
}
#include <stdio.h>

int main(void) {
    int flags = 7;
    int canRead = (flags & 1) != 0;
    int canWrite = (flags & 2) != 0;
    int canRun = (flags & 4) != 0;

    printf("read=%d write=%d run=%d\n", canRead, canWrite, canRun);
    return 0;
}
  1. flags ← 5, canRead ← 1, canWrite ← 0, canRun ← 1

    3int main(void) {4    int flags→ 5 = 5; //@flags=2, 75    int canRead→ 1 = (flags5 & 1) != 0;6    int canWrite→ 0 = (flags5 & 2) != 0;7    int canRun→ 1 = (flags5 & 4) != 0;89    printf("read=%d write=%d run=%d\n", canRead1, canWrite0, canRun1);10    return 0;11}
    outputread=1 write=0 run=1
  1. flags ← 2, canRead ← 0, canWrite ← 1, canRun ← 0

    3int main(void) {4    int flags→ 2 = 2;5    int canRead→ 0 = (flags2 & 1) != 0;6    int canWrite→ 1 = (flags2 & 2) != 0;7    int canRun→ 0 = (flags2 & 4) != 0;89    printf("read=%d write=%d run=%d\n", canRead0, canWrite1, canRun0);10    return 0;11}
    outputread=0 write=1 run=0
  1. flags ← 7, canRead ← 1, canWrite ← 1, canRun ← 1

    3int main(void) {4    int flags→ 7 = 7;5    int canRead→ 1 = (flags7 & 1) != 0;6    int canWrite→ 1 = (flags7 & 2) != 0;7    int canRun→ 1 = (flags7 & 4) != 0;89    printf("read=%d write=%d run=%d\n", canRead1, canWrite1, canRun1);10    return 0;11}
    outputread=1 write=1 run=1