运用异或运算实现两个数不通过中间变量交换值的原理分析

Posted 风起,唯有努力生存

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了运用异或运算实现两个数不通过中间变量交换值的原理分析相关的知识,希望对你有一定的参考价值。

或许对于像我现在这样的初学者很多都没见过这个符号 ^

 

这个是个异或运算的符号,好的,我们现在开始分析它的运行原理!

异或运算的知识请点击此连接后了解

http://baike.baidu.com/view/1452266.htm

 

将i和j的初始值给2进制化后

分别为

10 -- 0
5  -- 1
2  -- 0
1

 

10的二进制就为1010

-----------------------------

5 -- 1

2 -- 0

1

 

5的二进制就为 101

第一步:

i=i^j;

好了,我们将2个数都转换成了二进制后

在把他们异或运算下

 

1010

0101             --- 补0

1111             --- 或运算的结果

 再把二进制的1111转换成十进制的

1*2^3+1*2^2+1*2^1+1*2^0

8+4+2+1=15

现在的i的值就等于15了

 

第二步:

j=i^j;

1111

0101

1010             

 再把二进制的1010转换成十进制的

1*2^3+0*2^2+1*2^1+0*2^0

8+0+2+0=10

现在j的值就等于10了

 

第三步:

i=i^j;

1111

1010

0101

现在i的值就等于5了

 

最后就成功的将i和j的值给交换了!

以上是关于运用异或运算实现两个数不通过中间变量交换值的原理分析的主要内容,如果未能解决你的问题,请参考以下文章

C#中通过逻辑^(异或)运算交换两个值隐藏的巨坑!!!

如何不运用第三方变量实现两个数的交换

异或运算实现两个数的交换

异或

java面试之位运算(如何不通过第三方变量交换两个数字,效率最高的乘法运算)

如何不利用一个额外的变量来达到交换两个变量值的目的-------位上的异或运算