I am learning how to write SDL program in C++, and I came across this code:
SDL_Renderer *ren =
SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_R
The | is the bitwise OR operator, and in this case it is used to pass a set of flag to the SDL_CreateRenderer function.
Imagine a set of flag:
const int FLAG1 = 0x1 << 0; // 0b00...0001
const int FLAG2 = 0x1 << 1; // 0b00...0010
const int FLAG3 = 0x1 << 2; // 0b00...0100
/* ... */
As you can see from the binary representation of these flags, they only have one bit set to 1, and this bit is different for each flag, meaning that you can combine them using the | operator...
int flag_a = FLAG1 | FLAG2; // 0b00...0011
int flag_b = FLAG1 | FLAG3; // 0b00...0101
...while still being able to retrieve the original flags using the bitwise AND (&) operator:
int is_flag1_set = flag_a & FLAG1; // 0b00...0001 != 0
int is_flag2_set = flag_a & FLAG2; // 0b00...0010 != 0
int is_flag3_set = flag_a & FLAG3; // 0b00...0000 == 0