目录
按位异或的3个特点:
(1) 0^0=0, 0^1 = 1 即 0异或任何数 = 任何数
(2) 1^0=1, 1^1 = 0 即1异或任何数 = 任何数取反,一句话就是:相异为1,相同为0
(3) 任何数异或自己 = 把自己置 0
例如:3^3
换算为二进制:0011
0011
0000
按位异或的几个常见用途:
(1)使某些特定的位翻转
例如对数1000 1011的第2位和第三位翻转,则可以将该数与0000 0110进行按位异或运算:
1000 1011
0000 0110
1000 1101
(2)实现两个值的交换,不用使用临时变量或另开辟空间
例如交换两个数 a = 3 ,b =5
它们对应的二进制为a=0011,b=0101
a = a^b; //a=0110
b=b^a; //b=0011
a=a^b; //a=0101
其实这里用的是上面说到的第(3)个特点: 任何数异或自己 = 把自己置0。
上面在运算 b=b^a之前,已经运行了a=a^b,则b = b^a可以看成 b=b^a^b, 那b^b = 0, 0^a = a,所以a的值就赋给b了;
(3)在汇编语言中经常用于将变量置零:
xor a, a
(4)快速判断两个值是否相等
例如判断两个整数a,b是否相等,则可以通过下列语句实现:
return((a^b) == 0)