Bitwise
Flag Masks
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
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;
}
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
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
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