按位异或^
按位异或^是一种二进制位逻辑运算,属于双目运算。
先把两个参与运算数用二进制表示,同一位上的两个二进制数不同则为1、相同则为0。
特殊操作
a ^ a = 0
a ^ 0 = a
a ^ ~ a = 二进制全1
a ^ 二进制全1 = ~ a
~ ( a ^ ~ a ) = 0
( ~ 按位取反运算 单目运算符 )
妙用
改变二进制下某些位上的数(即0与1之间的翻转)
只需把欲翻转的位上数置为1,其他位上数置为0构成一个新数,与原数异或
例如1010001 ^ 0011001 = 1001000
不使用临时变量交换两值
a = a ^ b
b = b ^ a = b ^ ( a ^ b ) = a ^ ( b ^ b ) = a ^ 0 = a
a = a ^ b = ( a ^ b ) ^ a = b ^ ( a ^ a ) = b ^ 0 = b
( ^ 按位异或运算 满足交换律结合律 )
可进一步简化成如下形式
a ^= b ^= a ^= b
( ^ 按位异或运算 结合性从右到左 )