实现两个整数交换总结

 实现两个整数交换总结(面试中很可能会问到的问题)

   怎样把两个整数交换,听起来觉得是很简答的事情,会认为是菜鸟级问题,因为这算是学习任何一门语言中最常见的Code。
你很可能不到一分钟就把Code完成,方法当然是借助中间变量(最常见,普通的方法)。可是当面试官问你能否 不借助中间变量实现两个数字的交换的时候,是不是脑子嗡的一下,不知道该如何下手了呢?(嘿嘿.......没得关系,这里已经帮你总结好了)
下面我们就简单的总结一下,常用的几种方法,包含不借助中间变量的,直接实现两个数字的交换
(1) 最基本的方法就是使用一个临时变量
      swap( int *a, int *b )   {
                int tmp;

                tmp = *a;
                *a = *b;
                *b = tmp;
           }
下面三种方法是不借用中临时变量,而直接做相应的处理后,达到实现交换的目的
(2)  加法运算
      swap( int *a, int *b )   {
                *a  = *a + *b ;      // 此时 *a 其实是作为一个中间变量存在的
                *b = *a - *b;
                *a = *a - *b;
     }
(3) 减法运算
      swap( int *a, int *b )   {
                *a  = *a - *b ;      // 此时 *a 其实是作为一个中间变量存在的
                *b = *a + *b;    
                *a = *b - *a;     // 其实是简单的加法操作*a - ( *a - *b )
     }
(4) 异或运算(满足交换律   *a ^ *b  ^ *a  = *b   
      swap( int *a, int *b )   {
                *a  = *a ^ *b ;      // 此时 *a 其实是作为一个中间变量存在的
                *b = *a ^ *b;     //
                *a = *b ^ *a;     
     }
注意:在(4)中,不知道你发现问题没,就是当  *a  = *b  时会出现什么问题呢?还是你要的结果么?
I am so sorry!答案已经改变了,是什么呢,是 *a  和 *b  都变为 0 值了。为什么呢?你知道吗?
(就是最基本的“相同为0,相异为1”)

As you see, so easy!



















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值