不适用第三个参数交换两个参数的值
- 算数法
实质是对变量的加减运算;
//伪代码
int a,b;
a = 5;
b = 3;
a = b - a;//a = -2;
b = b - a;//b = 5;
a = a + b;//a = 3
- 指针地址操作
是地址做减法和加法,地址的互相替换;
此处要考虑地址的大小,不可以0x00000010-0x00000120。
int * a;//假设a的地址0x00000100
int * b;//b的地址0x00000120
a = new int(5);
b = new int(-3);
a = (int *)(b - a);//0x00000020
b = (int *)(b - a);//0x00000120 - 0x00000020
a = (int *)(a + b);//0x00000020 + 0x00000010
- 位运算
通过异或运算实现变量的对换;’
int a = 5; //00000101
int b = -3;//11111100
a = a^b; //11111001
b = a^b; //00000101
a = a^b; //11111100
- 乘除法
适合非负数
int a = 5;
int b = -3;
if(a < 0 )
{
a = a*b;
b = -a/b;
a = a/b;
}
else if(b < 0)
{
a = a*b;
b = a/b;
a = -a/b;
}
else
{
a = a*b;
b = a/b;
a = a/b;
}