Solo a modo de complemento al tema, quisiera añadir estos puntos de vista:
Analizando mas a fondo el código me he dado cuenta que los carácteres (A-Z) y (a-z ) todos los bits de estos son respectivamente iguales, excepto el sexto bit (contando desde la derecha)
a = 1100001 A = 1000001
b = 1100010 B = 1000010
c = 1100011 C = 1000011
d = 1100100 D = 1000100
Como pueden ver las minúsculas tienen el sexto bit a 1 y las mayúsculas a 0 en consecuencia al aplicarle el operador & con la mascara de bit apropiada logramos apagar el sexto bit y dejar los demás intactos obteniendo así su equivalente en mayúscula
1101 1111 <== Mascara de bit
&
0110 0001 <== a en binario
------------
0100 0001 <== A en binario
Analizando mas a fondo el código me he dado cuenta que los carácteres (A-Z) y (a-z ) todos los bits de estos son respectivamente iguales, excepto el sexto bit (contando desde la derecha)
a = 1100001 A = 1000001
b = 1100010 B = 1000010
c = 1100011 C = 1000011
d = 1100100 D = 1000100
Como pueden ver las minúsculas tienen el sexto bit a 1 y las mayúsculas a 0 en consecuencia al aplicarle el operador & con la mascara de bit apropiada logramos apagar el sexto bit y dejar los demás intactos obteniendo así su equivalente en mayúscula
1101 1111 <== Mascara de bit
&
0110 0001 <== a en binario
------------
0100 0001 <== A en binario