交换两个变量的值,不使用第三个变量
2013-03-31 15:30
211 查看
/* 交换两个变量的值,不使用第三个变量 */ #include <iostream> using namespace std; void Swap1(int& a, int& b) { if(a < b) { a=b-a; b=b-a; a=b+a; } else { b = a - b; a = a - b; b = a + b; } } void Swap2(int*& a, int*& b) { if(a<b) { a=(int*)(b-a); /* 采用位运算中的与运算“int(a)&0x0000ffff”,因为地址中高16位为 段地址,后16位为 位移地址, * 将它和0x0000ffff进行与运算后,段地址被屏蔽,只保留位移地址。 * 优点是在交换很大的数据类型时,它的执行速度比算术算法快。因为它交换的是地址,而变量值在内存中是没有移动过。 */ b=(int*)(b-(int(a)&0x0000ffff)); a=(int*)(b+(int(a)&0x0000ffff)); } else { b=(int*)(a-b); a=(int*)(a-(int(b)&0x0000ffff)); b=(int*)(a+(int(b)&0x0000ffff)); } } /* 此算法能够实现是由异或运算的特点决定的,通过异或运算能够使数据中的某些位翻转,其他位不变。 * 这就意味着任意一个数与任意一个给定的值连续异或两次,值不变。 * 即:a^b^b=a。将a=a^b代入b=a^b则得b=a^b^b=a;同理可以得到a=b^a^a=b;轻松完成交换。 */ void Swap3(int& a, int& b) { a=a^b; b=a^b; a=a^b; } int main(int argc, char* argv[]) { int a1 = 12, b1 = 10; Swap1(a1, b1); int* a2 = new int(12); int* b2 = new int(10); Swap2(a2, b2); int a3 = 5, b3 = 10; Swap3(a3, b3); system("pause"); return 0; }
相关文章推荐
- 交换两个变量值,不使用第三个变量
- 交换两个变量的值,不使用第三个变量的方法及实现
- 交换两个变量值,但不使用第三个变量的算法
- 交换两个变量的值,不使用第三个变量
- 交换两个变量的值,不使用第三个变量的四种法方
- 运算符(27)交换两个变量的值(不使用第三个变量法方)
- (转)交换两个变量的值,不使用第三个变量的四种法方
- C/C++:在不使用第三个变量的情况下实现两个变量的交换
- 不使用第三个变量,交换两个变量的值
- 不使用第三个变量交换两个int类型变量的值
- 交换两个变量的值,不使用第三个变量的四种法方
- 交换两个变量的值,不使用第三个变量
- 声明两个变量:int n1=10,n2=20;要求将两个变量交换,最后输出n1为20,n2为10。扩展(*):不使用第三个变量如何交换?
- 交换两个变量的值,不使用第三个变量
- 交换两个变量的值不使用第三个变量(Java)
- C语言(如何不使用第三个变量达到交换两个变量值的目的)
- 交换两个变量的值,不使用第三个变量(两种方法)
- 不使用第三个变量,实现交换两个变量的值
- 交换两个变量的值,不使用第三个变量
- PHP交换两个变量的值,不使用第三个变量