| sets a bit and & with an inverted mask clears a bit.

Set And Clear Bits

set_clear_bits.c
#include <stdio.h>

int main(void) {
    int flags = ;
    flags = flags | 2;
    flags = flags & ~1;

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

int main(void) {
    int flags = ;
    flags = flags | 2;
    flags = flags & ~1;

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

int main(void) {
    int flags = ;
    flags = flags | 2;
    flags = flags & ~1;

    printf("flags=%d\n", flags);
    return 0;
}
set bit `value | mask` turns on the bits named by the mask.
clear bit `value & ~mask` turns off the bits named by the mask.