本文记录了不使用中间变量交换2个变量的value,很多的网络留言说是直接异或运算就可以了,而且效率很高,是真的吗? 这里简单的说一下我的环境:Win7 32位,Qt creator 5.4.1 编译器MinGW4.9.2 32bit 调试器:GNU GDB 7.8 关于这个问题,网络上面有很多的解释,3种方法,我这里给比较一下各自的优缺点,然后简单分析一下汇编代码,分析代码如下: #include <stdio.h> void swap1(int &a,int &b) { in…
// 不用中间变量的写法 ,假如 a=13, b=8; a=a+b =21; //此时 a=21; b=8; b=a-b=13; //此时a=21; b=13; a=a-b=8; //相当于 a=21-13=8; // 第二种不用中间变量,换运算,效率比加法高点 a = a ^ b; b = a ^ b; a = a ^ b;…
1.使用加法与减法交换两数值: #define SWAP(a, b) ((&(a) == &(b)) || \ (((a) -= (b)), ((b) += (a)), ((a) = (b) - (a)))) 这种交换数值a与b的方法没有使用临时变量,初始化检测a,b,如果在同一内存区,则被忽略,当然这通常不会发生,(编译器会忽略,然而无论如何都是一种优化),假如可以确 定溢出异常,于是传递无符号数异常就不会抛出. 下面的逻辑“或”运算的方法在某些机器上可能要快一些,不要使用浮点型数字.…
public void changeVal(){ int a = 2; int b = 3; System.out.println("交换前 a:"+a+",b:"+b); a = a+b; b = a-b; a = a-b; System.out.println("交换后 a:"+a+",b:"+b); }…
#include <iostream> using namespace std; int main () { ; ; cout<<"a="<<a<<",b="<<b<<endl; a = a+b; ///a=7 b = a-b; ///b=3; a = a-b; ///a=5 cout<<"a="<<a<<",b="&l…
a = b = a = a+b b = a-b a = a-b print(a,b) a = b = a = a^b b = b^a a = a^b print(a,b) a = b = a,b = b,a print(a,b) 输出 (, ) (, ) (, )…
对于异或运算有这如下说明: 1^1=0 0^0=0 1^0=1 0^1=1 简单理解就是当两个书相同时结果为0,而两个数不同时异或的结果为1 可用于两个整数的交换,而不用去引入一个中间变量 #include<cstdio> #include<iostream> #include<algorithm> #include<cstring> using namespace std; int main() { int a,b; cin>>a>>…
如果要交换a.b之间的值,一般的做法是: tmp=a;a=b;b=tmp;这种方法不得不使用一个临时变量. 从网上学来一个方法,可以不用使用临时变量: a^=b^=a^=b; 这样计算之后,就可以交换a.b值 证明: 首先:^ 是 位运算 的一种: 异或 运算 1^1=0; 0^0=0; 1^0=1; 0^1=1; 将a.b用二进制表示为: a=An-1 An-2……A1 A0 b=Bn-1 Bn-2……B1 B0 由于a与b进行位运算,是各个bit位分别进行运算,互不影响,下面对某一个位值i上…
第一类方法也是常用的方法,通过多次的数值计算来完成交换,到现在知道的有下面三种: (1)加减法. a = a + b; b = a - b; a = a - b; 该方法可以交换整型和浮点型数值的变量,但在处理浮点型的时候有可能出现精度的损失,例如对数据: a = 3.123456 b = 1234567.000000 交换后各变量值变为: a = 1234567.000000 b = 3.125000 很明显,原来a的值在交换给b的过程中发生了精度损失. (2)乘除法. a = a * b;…
相信大家在PHP面试或者学习中经常会遇到这个问题就是“不用第三个变量来交换两个变量的值”,今天正对这个问题来讨论一下: 第一种方法:首先会想到的 这种方法简单可行,顺利的交换了两个变量的值. 第二种方法呢,稍加思考我们就会用到PHP中的函数来实现 第三种方法呢,我们来采用PHP中提供各种字符串分割函数来实现. 第四种方法呢,对字符进行编码,例如base64_encode,要保证编码是可逆的. 简单的题目不同的思想就会有不同的解法,期待更多的答案.…