Your code doesn't "compare" anything: it read a character from the user, makes sure that a specific bit is to one - from the value 32 you are Binary ORing the character with - and outputting it.
Since the decimal value 32 is hex 20, and teh difference between "A" and "a" is one bit:
http://www.asciitable.com/index/asciifull.gif[
^] the OR will ensure that the character it output is always lower case. Unless it's character in this set: "@[\]^" which get converted to "`{|}~" and "_" which will be font dependant.
And no, & (AND) and ^ (XOR) do not do comparisons either. To compare anything, you need to use a conditional instruction like
if
or
while
for example.