请教这个异或运算的原理是什么

请问这个异或运算的原理是什么
#include <stdio.h>

int main(void)
{
unsigned int a,b;
unsigned int mask = 1U << 6;
a = 0x12345678;
b = a^mask; /*flip the 6th bit*/ //为什么这里可以将第6位反转呢。
printf("%d\n",mask);
printf("%d\n",b);
}

------解决方案--------------------
exclusive or true table
------解决方案--------------------

两个值不相同,则异或结果为真。反之,为假。 不同为1,相同为0.

------解决方案--------------------
异或运算,相等的为0,不等为1。
mask除了第6位是1,其余都是0,所以a中除了第6位,其余原来是1的,异或0还是1,原来是0的,异或0还是0
mask第6位是1,所以a的第6位,如果是1,异或1是0,如果是0,异或1是1,这样完成第6位反转。
------解决方案--------------------
引用:
exclusive or true table

你的例子中: B为1,如果A为1则输出0, 如果A是0,则输入1。 也就是把A翻转。
------解决方案--------------------
unsigned int mask = 1U << 6;

为什么要写成1U呢?求指导  

1<<6 或者 0x1<<6不行吗 ?