鱼C论坛

 找回密码
 立即注册
查看: 1975|回复: 4

[已解决]异或运算符用法

[复制链接]
发表于 2018-10-25 08:58:11 | 显示全部楼层    本楼为最佳答案   
本帖最后由 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;
         1  0  1  0
   ^    1  1  0  0
----------------------
         0  1  1  0
a = 0110,b = 1100

交换两个数相当于比较他们的每一个二进制位,相同的不变,不同的交换
这一步的目的就是运算得出不相同的二进制位,0表示相同,1表示不同
所以a的结果 0110 表示:a和b的中间两位不同,最低和最高位相同

(2)b = a ^ b
         0  1  1  0
   ^    1  1  0  0
----------------------
         1  0  1  0

a = 0110,b = 1010
这一步是让b的值变成a原来的值,(1)已经算出来a和b的中间两位不同,所以这一步将b的中间两位翻转就能得到a

(3)a = a ^ b
         0  1  1  0
   ^    1  0  1  0
----------------------
         1  1  0  0

a = 1100,b = 1010
上一步b的值变成a原来的值了,a的结果仍然是a ^ b,对于b(现在已经是原来a的值),相同的位数不变,不同的位数取反,其结果就是原来b的值。

建议还是不要用这种方法交换两个数,同样不用第三个变量,用加减法就能做到交换两个数:
a = a + b
b = a - b
a = a - b
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-7 03:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表