¿Cuál es la idea detrás de ^ = 32, que convierte letras minúsculas en mayúsculas y viceversa?

Estaba resolviendo algún problema en las fuerzas de código. Normalmente, primero verifico si el carácter es una letra en inglés superior o inferior y luego resto o agrego32 para convertirlo a la letra correspondiente. Pero encontré a alguien haciendo^= 32 para hacer lo mismo. Aquí está

char foo = 'a';
foo ^= 32;
char bar = 'A';
bar ^= 32;
cout << foo << ' ' << bar << '\n'; // foo is A, and bar is a

He buscado una explicación para esto y no lo descubrí. Entonces, ¿por qué esto funciona?

Respuestas a la pregunta(10)

Su respuesta a la pregunta