在 C/C++ 中交换两个数字而无需第三个数字

Ank*_*ich -2 c++

我们通常使用

a=a+b; 
b=a-b; 
a=a-b;
Run Code Online (Sandbox Code Playgroud)

解决此代码的逻辑,但是,如果我们使用int,则在 say 后30000代码失败,如果我们采用long,则在 say 后失败1000000。我的目标是,还不增加代码长度,做同样的操作。我已经尝试过使用BIT wise XOR

a = a ^ b;
b = a ^ b;
a = a ^ b;
Run Code Online (Sandbox Code Playgroud)

仍然没有帮助,有什么想法吗?

Jan*_*ner 5

交换变量a和变量bstd::swap(a, b);
示例:

int a = 10;
int b = 20;

std::cout << "Before swap\n";
std::cout << "Value of a: " << a << '\n';
std::cout << "Value of b: " << b << '\n';

std::swap(a, b);

std::cout << "After swap\n";
std::cout << "Value of a: " << a << '\n';
std::cout << "Value of b: " << b << '\n';
Run Code Online (Sandbox Code Playgroud)

使用 GCC 4.9.2 的输出:

交换前
a 的值:10
b 的值:20
交换后
a 的值:20
b 的值:10

这种方法在内部使用右值,因此对于其他用例来说它的开销几乎为零,并且对于任何基元类型都不会溢出