"异或"实现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

相关文章推荐

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

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

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

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

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

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

用异或运算交换连个变量

在论坛的帖子里看到一个面试题,交换两个整数。以往知道的方法有两种,一是使用临时变量temp,二是两个整数相加减的算法。在帖子里发现了第三种算法,异或运算: a=a^b; b=b^a; a=b...

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

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

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

转载于:http://blog.csdn.net/heathyhuhu/article/details/12744407 通常的交换两个变量a,b的过程为 int temp;temp=aa=b;b=t...

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

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

使用异或运算实现两数交换

三种方法实现两数互换

Java中异或运算实现两个整数的交换以及其功能函数实现

今天学习到一种超酷炫的交换两个整数的方法,给各位分享一下。异或运算属于位运算的一种,首先简单介绍一下异或预算的语法规则。 假设a与b为不相等的两个整数。 (1)a^a=0; (2)a^b=0; (3)...

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

我们知道,用异或运算可以不用定义中间变量就可以交换两个数。如下: int a=2; int b=3; System.out.println("交换前:a="+a+" b="+b); a...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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