本帖最后由 罗海云 于 2013-2-22 18:41 编辑
^ 是按位异或操作符。两数相同的话异或的结果就是 0,否则是 1。举个例子,比如 a 表示十进制的 5,b 表示十进制的 12,按位异或结果就是:
a = 0011 (3 的二进制表示)
b = 0100(4 的二进制表示)
有两个定理:
任何一位二进制数同 1 异或都会变成另外一个(0 同 1 异或的结果是 1,1 同 1 异或的结果是 0)
任何一位二进制数同 0 异或都保持不变(0 同 0 异或的结果是 0,1 同 0 异或的结果是 1)
下面我给你举得一个列子:
int a = 3,b = 4;
a a b
a = a ^ b;//这儿就是 0111 = 0011 ^ 0100
b a b
b = a ^ b;//然后 0011 = 0111 ^ 0100
a a b
a = a ^ b;//然后就是0100 = 0111 ^ 0011
System.out.println("a: "+a+"b: "+b);
总之玩异或不懂就想把数值转换成2进制慢慢跟着程序走..就懂了 |