I was solving some problem on codeforces. Normally I first check if the character is upper or lower English letter then subtract or add
32 to convert it to the corresponding letter. But I found someone do
^= 32 to do the same thing. Here it is:
char foo = 'a'; foo ^= 32; char bar = 'A'; bar ^= 32; cout << foo << ' ' << bar << '/n'; // foo is A, and bar is a
I have searched for an explanation for this and didn't find out. So why this works?
Let's take a look at ASCII code table in binary.
A 1000001 a 1100001 B 1000010 b 1100010 C 1000011 c 1100011 ... Z 1011010 z 1111010
And 32 is
0100000 which is the only difference between lowercase and uppercase letters. So toggling that bit toggles the case of a letter.