"异或"实现a和b两变量交换

转载 2015年11月19日 09:45:05

 今天在看C语言的位运算时,看到了如下交换a,b两值的方法:

                    a = a^b;

                    b = a^b;

                    a = a^b;

后来想想,真是太神奇了!其实,我们首先知道,对于任意的x满足:

                               x^x == 0;

                               x^0 == x;

那么上面的式子事实上是利用了如上的规则,首先用a保存了a^b的 值,再用b = a ^ b = (a^b)^b=a^b^b=a^(b^b)=a^0=a,这样就成功的实现了b = a;接着又用a = a^b = (a^b)^b(第一个b还是原来的b,而第二个b已经是a的值,因为前面已经实现了交换)= (a^b)^a = a^a^b = 0^b = b,这样就实现了a = b;于是,就成功的实现了a,b两个值的交换。

本文出自 “风轻云淡” 博客,请务必保留此出处http://beyond99.blog.51cto.com/1469451/407820

在不借助第三方变量情况下实现两个变量的交换(借助于异或运算)

下面首先来看一个问题。 假设存在两个int型变量a和b,那么如何实现两个变量值的交换呢。 通常我们的做法,也是最容易想到的做法就是通过定义一个第三方变量,然后借助于该变量来实现变量值的交换。 方...

为什么异或运算可以实现两个整数的交换,而无需借助第3个临时变量

通常的交换两个变量a,b的过程为 int temp; temp=a a=b; b=temp; 需借助上面的第3个临时变量temp. 采用下面的方法,对于给定两个整数a,b,...
  • jocks
  • jocks
  • 2012年11月14日 14:23
  • 4226

为什么异或运算可以实现两个整数的交换,而无需借助第3个临时变量

通常的交换两个变量a,b的过程为 int temp; temp=a a=b; b=temp; 需借助上面的第3个临时变量temp. 采用下面的方法,对于给定两个整数a,b,...

异或运算 ^ 变量交换及找出现一次的数

一、交换2个变量 如果想要交换2个变量,一般的做法是引入第三个变量, 例如, [cpp] view plaincopy temp...

不使用临时变量交换两个变量的值(异或,加减,乘除)

使用异或交换两个变量的值 异或有一些有趣的用法,这里用异或的性质求出数组内一个唯一一个只出现一次的元素。 一般我们交换两个变量的值的时候,一般会用到一个辅助变量,当然,也有一些脚本语言如Python...

异或运算及其在交换变量值中的使用

在计算机中,如果想要交换变量的值: Demo1: 常规的算法是 public static void doSwitch(int a,int b){ int temp = a; ...

交换变量值的方法,异或并不高效或者说是一个花哨的招聘产物

今天上午听同学说不用中间变量怎么交换两个变量的值,下面就罗列了几种交换值的方法,并且测试了其中3种交换变量值方法的效率。这种方法也有一定缺陷:当要交换的两个数值指向同一个内存空间时交换就会出错即a^=...

交换两个数不使用第三方变量=!!=深入理解按位异或运算符

不使用第三方变量交换两个变量的值这需要进行位操作,必较麻烦的, 在学习程序语言和进行程序设计的时候,交换两个变量的值是经常要使用的。通常我们的做法是(尤其是在学习阶段):定义一个新的变量,借助它完...

不使用第三个变量交换两个变量的值之"异或"的实际应用

交换两个变量的值,不使用第三个变量的四种方法

不使用temp变量来交换两个值??该使用异或吗?

通常碰上这种问题,大多是在c++面试中,通常的答案有使用异或来实现,比如如下代码: 反转字符串"abcde"为"edcba" { char *begin = str; ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:"异或"实现a和b两变量交换
举报原因:
原因补充:

(最多只允许输入30个字)