题目
交换两个整形数,但不能新建变量
方法1
用相加相减的方法:
int main()
{
int a=0,b=0;
scanf("%d",&a,&b);
a= a+b;
b=a-b;//这样b就等与了a
a=a-b;//a就等于了b
}
但这样的结果存在溢出的可能性,因为a要等于a+b,加入a和b都是很大的数,两者相加的值可能大于int的最大范围,那就会溢出。
方法2
按位异或的方法
异或原则
a^a =0
a^0=a
int a=10;
int b=20;
a=a^b;//这是为第二步做准备,把下面几个式子都拆分成最初的a和b,然后进行异或
b=a^b;//实际上为a^b^b,因为b和b异或等于0,再和a异或还是a,所以b就被赋值为a
a=a^b;//实际上a^b^a^b^b,两个a,两个b异或都为0,最后再和b异或,为b,赋值给a
这是不创建中间变量交换两数的办法,但在开发过程中,依然还是创建一个中间变量这样的方法来的快,还好理解,上述两个办法多是面试题中常见的办法