关于使用异或完成两个数的交换

原创 2007年09月30日 20:27:00

使用异或可以交换两个数,例如

void swap(int &a, int &b)

{

a ^= b ^= a ^= b;

}

通常这个表达式是正确的,因为a与b常常位于不同的地址。但是当a与b位于相同地址时这个操作就是错误的,例如下面这个调用

swap(a, a);

无论a是多少,最后结果a将是0。计算的过程中b的值会随a的值改变而改变。

另外,见过一篇文章从编译的角度也分析了这种异或方式的交换的效率比常规交换要低。

可见,这种交换方式看起来很美,但缺点多多,不易于维护还没有效率。这不是说这种用法没有意义,只能说不适合用作数据交换。

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

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

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

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

java异或运算交换两个数的陷阱

我们知道,用异或运算可以不用定义中间变量就可以交换两个数。如下: int a=2; int b=3; System.out.println("交换前:a="+a+" b="+b); a...
  • Mr__mao
  • Mr__mao
  • 2015年08月12日 20:43
  • 411

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

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

【C/C++】异或操作巧妙实现两个数的交换操作

今天在看OpenGL加载TGA格式图像用作纹理的代码时,看到关于RGB(A)顺序转换的一行代码时,捉一开始感到很困惑,后来想了想,就是实现交换操作。 原始代码: texture->imageD...

异或的运用 交换两个数的值

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

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

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

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

通常的交换两个变量a,b的过程为 int temp; temp=a a=b; b=temp; 需借助上面的第3个临时变量temp. 采用下面的方...
  • ztk329
  • ztk329
  • 2014年11月16日 18:21
  • 166

用异或求一堆数中只出现过一次的两个数(广东工业大学新生赛H题)

Problem H: 《为什么会变成这样呢》 Description “第一次有了喜欢的人,还得到了一生的挚友,两份喜悦互相重叠,这双重的喜悦又带来了更多更多的喜悦,本应已经得到了梦幻一般的幸福...

不用算术运算符实现两个数的加法(按位异或)

http://www.cnblogs.com/houjun/p/4908725.html 对于二进制的加法运算,若不考虑进位,则1+1=0,1+0=1,0+1=1,0+0=0,通过对比异或,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于使用异或完成两个数的交换
举报原因:
原因补充:

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