Exclusive-or toggles selected bits while leaving the others alone.

xor `^` flips a bit when the mask has `1` in that position.
repeated toggle Applying the same toggle twice returns the original bits.

Toggle Bits

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

int main(void) {
    int flags = 6;
    int toggled = flags ^ 3;
    int restored = toggled ^ 3;

    printf("toggled=%d restored=%d\n", toggled, restored);
    return 0;
}
#include <stdio.h>

int main(void) {
    int flags = 1;
    int toggled = flags ^ 3;
    int restored = toggled ^ 3;

    printf("toggled=%d restored=%d\n", toggled, restored);
    return 0;
}
#include <stdio.h>

int main(void) {
    int flags = 4;
    int toggled = flags ^ 3;
    int restored = toggled ^ 3;

    printf("toggled=%d restored=%d\n", toggled, restored);
    return 0;
}
  1. flags ← 6, toggled ← 5, restored ← 6

    3int main(void) {4    int flags→ 6 = 6; //@flags=4, 15    int toggled→ 5 = flags6 ^ 3;6    int restored→ 6 = toggled5 ^ 3;78    printf("toggled=%d restored=%d\n", toggled5, restored6);9    return 0;10}
    outputtoggled=5 restored=6
  1. flags ← 1, toggled ← 2, restored ← 1

    3int main(void) {4    int flags→ 1 = 1;5    int toggled→ 2 = flags1 ^ 3;6    int restored→ 1 = toggled2 ^ 3;78    printf("toggled=%d restored=%d\n", toggled2, restored1);9    return 0;10}
    outputtoggled=2 restored=1
  1. flags ← 4, toggled ← 7, restored ← 4

    3int main(void) {4    int flags→ 4 = 4;5    int toggled→ 7 = flags4 ^ 3;6    int restored→ 4 = toggled7 ^ 3;78    printf("toggled=%d restored=%d\n", toggled7, restored4);9    return 0;10}
    outputtoggled=7 restored=4