El problema que tiene el desplazamiento binario es que pierdes información. Si desplazas a la derecha, el bit más a la derecha se pierde y se crea un hueco a la izquierda... que se rellena con un '0' y lo mismo pasa con los desplazamientos a la izquierda.
Respondiendo a tu duda, si sabes que el 5º bit es el encargado de efectuar ese cambio puedes hacer lo siguiente:
Código C:
Ver originalchar letra='h';
char mascara = 1 << 5; // esto es equivalente a 0x20 o 0100000
// Si aplicamos una operación XOR alternaremos entre mayúsculas y minúsculas
letra ^= mascara;
printf( "%c" letra
); // Imprime H
// Si aplicamos una operación OR cambiaremos de mayúscuas a minúsculas
letra |= mascara;
printf( "%c" letra
); // Imprime h
// Para apagar el bit hay que invertir la máscara y realizar una operación AND
mascara ^= 0xFF;
letra &= mascara;
printf( "%c" letra
); // Imprime H
Ahora mismo no puedo compilar, pero creo que el código está bien.