两个数字交换不用第三个变量

交换函数

注意:虽然不用第三方变量的写法感觉很牛,但是在复杂的程序环境中容易出现bug(下面会举例bug)并且技巧性越强的代码bug越不好找;因此只需掌握不用第三个变量的思路,平时最好用第三个变量来交换两个数字

1.常用,最好理解:用第三方变量协助交换(相当于一瓶可乐,一瓶雪碧交换,用一个空瓶子实现)

void Swap(int *p1 , int *p2)
{
int tmp = *p1;
*p1 = *p2;
*p2 = tmp;
return 0;
}
int main()
{
int a=10;
int b=20;
Swap(&a,&b);
return 0;
}

2.不用第三方变量(重在思路)
2.1 加减交换
a =10 ; b=20
b=a+b 10 30
a=b-a 20 30
b=b-a 20 10

void Swap(int *p1 , int *p2)
{
*p2+=*p1;
*p1=*p2-*p1;
*p2=*p1-*p2;
return 0;
}

同理: b = b - a;
a = a + b;
b = a - b;
也可以

2.2 异或交换
int a =10 ; b=20 (int4个字节中前三个全为0,省略)
0000 1010 (10) 0001 0100(20)
a=a^b 0001 1110 (30) 0001 0100(20)
b=b^a 0001 1110 (30) 0000 1010(10)
a+a^b 0001 0100(20) 0000 1010(10)

     void  Swap(int *p1 , int *p2)
     {
   *p2  ^= *p1;
    *p1 ^= *p2;
    *p2 ^=  *p1;
    return  0;

}

可能存在bug举例:

#include<stdio.h>
void  Swap
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值