位异或吧 关注:1贴子:7
  • 0回复贴,共1

深入理解按位异或运算符

只看楼主收藏回复


参与运算的两个值,如果两个相应
bit
位相同,则结果为
0
,否则为
1

即:
0^0 = 0

1^0 = 1

0^1 = 1

1^1 = 0
例如:
10100001^00010001=10110000
按位异或的
3
个特点
:
(1) 0^0=0,0^1=1
0
异或任何数=任何数
(2) 1^0=1,1^1=0
1
异或任何数-任何数取反
(3)
任何数异或自己=把自己置
0
按位异或的几个常见用途
:
(1)
使某些特定的位翻转
例如对数
10100001
的第
2
位和第
3
位翻转,
则可以将该数与
00000110
进行按位异或运
算。
10100001^00000110 = 10100111
(2)
实现两个值的交换,而不必使用临时变量。
例如交换两个整数
a=10100001

b=00000110
的值,可通过下列语句实现:
a = a^b

//a=10100111
b = b^a

//b=10100001
a = a^b

//a=00000110
////////////////////////////////////////////////////////////
两个变量交换值的方法【
http://blog.sina.com.cn/s/blog_676015470100izpg.html

第一种方法,大家会借助第三个变量来实现:
如:
C=A;A=B;B=C;
这种方法需要借助第三变量来实现;
第二种方法是利用加减法实现两个变量的交换,
如:
A=A+B;B=A-B;A=A-B;
第三种方法是得用位异或运算来实现,
也是效率最高的一种,
在大量数据交换的时候,
效率
明显优于前两种方法,
如:
A=A^B;B=A^B;A=A^B;
原理:利用一个数异或本身等于0和异或运算符合交换率。


IP属地:湖北1楼2014-06-09 22:41回复