a ^= b ^= a ^= b看到了一个不需要中间变量交换两个的得方法
来源:互联网 发布:如何自己制作动画知乎 编辑:程序博客网 时间:2024/06/11 06:49
形式是这样的:
a ^= b ^= a ^= b
It swaps a and b without using a temporary.
用了一堆的XOR操作,猛地一看有点晕。。。
其实只是装的高深了而已。。。我们这样看:
a ^= (b ^= (a ^= b));
或者直接这样写好了:
a^=b;
b^=a;
a^=b;
这样子看起来就舒服多了,然后我们来分析一下:
首先说一下^这个运算符,XOR运算符很多人应该都明白,就是按位运算,相同为0,不同为1.
这个例子很好的利用了这个特性。
a^=b;//a此时为a XOR b的值,这样很巧妙的用a保存了a与b的差异存在的地方,即凡是a中为1的地方,均是a与b不同的地方
b^=a;//b = b xor a;这很好理解了,将b中所有与a不同的地方置反,此时的b就是a了。
a^=b;//这句和第二句的意思是近乎相同的。
其实这样的交换方法,只是巧妙的将a和b的信息藏在了其中的一个变量中,从某种程度来说,交换总是需要一个媒介的。所谓的不需要中间变量的做法,其实也都是采用了一些巧妙的思路,使信息隐藏在变量中了。
不过这些思路还是很值得学习的,蛮发散的。
- a ^= b ^= a ^= b看到了一个不需要中间变量交换两个的得方法
- 交换两个数的值(使用中间变量和不使用中间变量的情况void main() { int a=1,b=3; //swap1(&a,&b); swap2(&a,&b); printf("a=%d, b=%)
- 这是个巧妙的表达式: a ˆ= b ˆ= a ˆ= b 它不需要临时变量就可 以交换a 和b 的值
- 这是个巧妙的表达式: a ˆ= b ˆ= a ˆ= b 它不需要临时变量就可 以交换 a 和 b 的值。
- 两个变量a,b交换值的方法
- 不使用中间变量,交换int型的 a, b两个变量的值
- 不使用中间变量,交换int型的 a, b两个变量的值
- 不使用中间变量,交换int型的 a, b两个变量的值。
- 不用中间变量交换 a ,b(三种方法)
- 交换a,b, 不使用中间变量
- 交换a,b, 不使用中间变量
- 不用中间变量交换 a ,b
- 不使用中间变量交换a和b的值
- 不使用中间变量的a,b值交换
- 不用中间变量交换a,b的值
- 不使用中间变量交换a和b的值
- 不用中间变量交换a和b的值
- 交换a、b的值temp = a; a = b; b = temp;比a = a^b;b = a^b;a = a^b;快
- struts做开发的时候action是继承Action方法还是ActionSupport方法
- Word 如何设置图片编号
- PHP截取中文字符串方法
- CreationOfKillzone3(杀戮地带3的制作)
- 抓包检测邮箱安全问题
- a ^= b ^= a ^= b看到了一个不需要中间变量交换两个的得方法
- 同一台机器配置多个域名的方法
- Java创建与获得对象的几种方式
- SVN 回退
- What transpires when rogueware is installed?
- 第一次当主考
- try throw new Exception 执行顺序
- 做网页在IE中能够居中但在火狐Firefox中不能居中解决办法
- 广播的发送程序