Я решал некоторые проблемы с codeforces. Обычно я сначала проверяю, является ли символ верхней или нижней английской буквой, затем вычитаю или добавляю 32
чтобы преобразовать его в соответствующую букву. Но я обнаружил, что кто-то делает ^= 32
чтобы сделать то же самое. Вот:
char foo = 'a';
foo ^= 32;
char bar = 'A';
bar ^= 32;
cout << foo << ' ' << bar << '\n'; // foo is A, and bar is a
Я искал объяснение этому и не узнал. Так почему это работает?