Bitwise
Toggle Bits
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
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;
}
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
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
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