注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

ocean's blog

平常心——可以寂寞,但不允许空虚

 
 
 

日志

 
 

不通过中间变量交换两个数的值  

2009-06-22 12:27:11|  分类: C++(转) |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
学过编程的人都知道,在交换两个数的数值时通常的做法是采用一个中间变量作为中介,如下:

void change (int x, int y)

{

        int temp;

        temp=x;

        x=y;

        y=temp;

}

       喜欢思考的朋友可能会问,有没有一种方法不采用中间变量就能实现两个数值的交换呢?

       笔者在学习编程的过程中也仔细考虑过这个问题,但天生愚钝,不得其法。近日在学习孙鑫的《VC++深入详解》时偶然发现了这么一种方法,欣喜若狂,转述如下:

void chang(int& a, int& b)

{

      a=a+b;

      b=a-b;

      a=a-b;

}

       笔者一开始感觉不可思议,但是仔细思考之后发现确实可以改变两个变量的数值,而且是通过不采用中间变量的方式。

       以上方法当两个数很大时,可能会出现越界。故介绍以下方法:

       对两个数进行异或处理:

void chang(int& a, int& b)

{

             a=a^b;

             b=a^b;

             a=a^b;

}

  评论这张
 
阅读(93)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017