两数交换, 不引入第三个变量
本文地址: http://blog.csdn.net/caroline_wendy/article/details/15506627
两种方法, 推荐第一种方法;
第一种方法(加减):
a = a+b; b = a-b; a = a-b;
第二中方法(异或):
a = a^b; b=a^b; a=a^b;
即 a ^= b ^= a ^= b;
不推荐使用异或方法,CFAQs里面有说明;
异或方法是未定义的(undefined)和不可移植的(not portably), 对于某些编译器会出现问题.
具体参见: http://c-faq.com/expr/xorswapexpr.html
代码:
/*
* test.cpp
*
* Created on: 2013.11.12
* Author: Caroline
*/
#include <iostream>
int main (void) {
int a = 2, b = 10;
std::cout << "original: ";
std::cout << "a = " << a << " b = " << b << std::endl;
//加减方法
a += b;
b = a-b;
a -= b;
std::cout << "plus&minus: ";
std::cout << "a = " << a << " b = " << b << std::endl;
//异或方法
a ^= b ^= a ^= b;
std::cout << "xor: ";
std::cout << "a = " << a << " b = " << b << std::endl;
return 0;
}