异或运算符用法
a=a^b;b=b^a;
a=a^b;是什么意思
交换 a 和 b 的值,如果要通过一个函数来交换 a 和 b 的值,有几种方法:
1. 通过引用来修改
2. 通过指针来修改
3. 通过位运算符来修改 本帖最后由 calton007 于 2018-10-26 15:27 编辑
^ 是异或运算符,异或也叫半加运算,其运算法则相当于不带进位的二进制加法。
在二进制下用1表示真,0表示假,则异或的运算法则为:
0^0=0
1^0=1
0^1=1
1^1=0
概括为相同为0,不同为1。
举个例子:
假设 a = 10(二进制表示为 1010), b = 12(二进制表示为 1100)
(1)a = a ^ b;
1010
^ 1100
----------------------
0110
a = 0110,b = 1100
交换两个数相当于比较他们的每一个二进制位,相同的不变,不同的交换
这一步的目的就是运算得出不相同的二进制位,0表示相同,1表示不同
所以a的结果 0110 表示:a和b的中间两位不同,最低和最高位相同
(2)b = a ^ b
0110
^ 1100
----------------------
1010
a = 0110,b = 1010
这一步是让b的值变成a原来的值,(1)已经算出来a和b的中间两位不同,所以这一步将b的中间两位翻转就能得到a
(3)a = a ^ b
0110
^ 1010
----------------------
1100
a = 1100,b = 1010
上一步b的值变成a原来的值了,a的结果仍然是a ^ b,对于b(现在已经是原来a的值),相同的位数不变,不同的位数取反,其结果就是原来b的值。
建议还是不要用这种方法交换两个数,同样不用第三个变量,用加减法就能做到交换两个数:
a = a + b
b = a - b
a = a - b
^按位异或,两个数对应位每一位的数值相等就赋0,不等则赋1。
楼上讲的已经很全面了 按位逐一操作,遇到0不变,遇到1取反。这样会好记一点。
页:
[1]