tempad
Readygo技术搜索引擎 >>软件测试 >> 两个变量进行互换,但是不用第三个变量

两个变量进行互换,但是不用第三个变量

Readygo技术搜索引擎 网络搜索 efish 2008-1-17 9:39:56

两个变量进行互换,但是不用第三个变量

楼主icesg()2002-10-08 17:07:07 在 C/C++ / C语言 提问

现有两个变量,在不用第三个变量的情况下把这两个变量的值进行互换。 问题点数:0、回复次数:31Top

1 楼szbug(深圳虫)回复于 2002-10-08 17:18:59 得分 0

用汇编,通过寄存器。Top

2 楼terron(注定编程一生)回复于 2002-10-08 17:20:08 得分 0

很简单啊  
  有很多种方法  
  比如   :  
   
  int   a   =   0,   b   =   1;  
   
  a   =   b   -   a;  
  b   =   b   -   a;  
  a   =   b   +   a;Top

3 楼icesg()回复于 2002-10-08 17:21:18 得分 0

是在C++的情况下进行操作的啊!Top

4 楼hellomartin(小白狼)回复于 2002-10-08 17:23:41 得分 0

也可以协汇编Top

5 楼miaoweijun(苗苗)回复于 2002-10-08 17:24:28 得分 0

用两次异或也可以  
   
  /^&&^\  
      --    
  Top

6 楼anyoshon(好学)回复于 2002-10-08 17:25:45 得分 0

我真的不知道.希望有高手给出办法来.Top

7 楼kbsoft(让世界充满爱!)回复于 2002-10-08 17:25:54 得分 0

void   swap(int   &a,int   &b)  
  {  
          a=a^b;  
          b=b^a;  
          a=a^b;  
  }Top

8 楼jyc_nj(老蔣)回复于 2002-10-08 17:26:36 得分 0

是在C++的情况下进行操作的啊!  
  ???  
  你把文件存成.cpp吧.   :)    
  圣人也要吃喝拉撒啊,C++又不是不能用C的东东.Top

9 楼kbsoft(让世界充满爱!)回复于 2002-10-08 17:29:36 得分 0

void   swap(int&   a,int&   b)  
  {  
  a=a+b;  
  b=a-b;  
  a=a-b;  
  }  
   
   
  void   swap(int&   a,int&   b)  
  {  
  a=a-b;  
  b=a+b;  
  a=b-a;  
  }  
  Top

10 楼icesg()回复于 2002-10-08 17:30:25 得分 0

可是这两个变量可能不是int类型啊,可能是字符等等。Top

11 楼blue_coco(椰子)回复于 2002-10-08 17:33:21 得分 0

用汇编的XCHG了。  
  int   a,   b;  
   
  1》  
  asm  
  {  
          les   bx,   a;  
          xchg   bx,   b;  
  }  
   
  2》  
  另外用移动位也可以。  
  如果数是0   -   255之间。  
  那么定义两个int   型;  
  int   a,   b;  
   
  a   =   (a   <<   8)   |   b;  
  b   =   a   >>   8;  
  a   &=   0x00ff;  
     
   
   
   
   
   
   
  Top

12 楼baihecheng(百合)回复于 2002-10-08 17:40:42 得分 0

void   swap(double&   a,double&   b)  
  {  
  a=a-b;  
  b=a+b;  
  a=b-a;  
  }  
   
  Top

13 楼merlinran(天行者)回复于 2002-10-08 17:44:44 得分 0

楼主点明是在C++的情况下,那么分成两种情况:  
  1、要交换的东西是某种类对象,而且具有swap()成员函数(或者类似的),这不是我异想天开,对于封装了内部表示的大对象,提供交换函数是很好的选择。  
  2、条件1不符合,但有operator+和operator-,可以用上面提出的方法,但要注意溢出(加或减的结果超出范围)和精确交换(比如浮点数的交换)的问题。Top

14 楼zhpsam109(JACKY.昊昊)回复于 2002-10-08 18:50:13 得分 0

a=a+b;  
  b=a-b;  
  a=a-b;Top

15 楼chinalin0(永远的天堂)回复于 2002-10-08 18:55:26 得分 0

用位运算就可。Top

16 楼tanghui21(说话是我的职业)回复于 2002-10-08 19:03:24 得分 0

三次异或Top

17 楼sinusoid(黑眼圈)回复于 2002-10-08 19:13:53 得分 0

 
  void   swap(int   *a,int   *b) /*交换两个数*/  
  {  
      *a^=*b;*b^=*a;*a^=*b;  
  }Top

18 楼AlanLuo_2002(耶罗)回复于 2002-10-08 19:16:52 得分 0

int   a(1),b(2);  
  a=a+b;  
  b=a-b;  
  a=a-b;Top

19 楼suntao222(三万英尺)回复于 2002-10-08 19:20:29 得分 0

用磁盘文件操作  
  先写一个内容A到文件一  
  再写一个内容B到文件二  
  读文件一把内容付给二  
  读文件二把内容伏个一  
  不管什么是什么变量,是指针也好,是类也好,都可以解决.Top

20 楼zharP(斩铁)回复于 2002-10-08 19:21:36 得分 0

老谭的书上有  
   
  用异或……  
  ================================================================  
   
    论坛助手   Ver   1.0   B0402提供下载。   改进了很多,功能完备!  
   
  ★     浏览帖子速度极快!。   ★     多种帖子实现界面。    
  ★     保存帖子到本地★     监视您关注帖子的回复更新。  
  ★     可以直接发贴、回复帖子★     采用XML接口,可以一次性显示4页帖子,同时支持自定义每次显示帖子数量。可以浏览历史记录!    
  ★     支持在线检测程序升级情况,可及时获得程序更新的信息。  
   
  ★★   签名     ●      
            可以在您的每个帖子的后面自动加上一个自己设计的签名哟。  
   
  Http://www.ChinaOK.net/csdn/csdn.zip  
  Http://www.ChinaOK.net/csdn/csdn.rar  
  Http://www.ChinaOK.net/csdn/csdn.exe          
   
  Top

21 楼leon460(leon460)回复于 2002-10-08 20:09:40 得分 0

假使变量为A   和B  
  方法:  
  A=A+B;  
  B=A-B;  
  A=A-B;  
  Top

22 楼JennyVenus()回复于 2002-10-08 20:39:00 得分 0

a=a+b  
  b=a-b  
  a=a-b  
  哈哈和上面一样了  
  这个在两个不同类型的变量交换时候有bug,整型的也要考虑溢出Top

23 楼WingForce(初六,履霜,坚冰至。)回复于 2002-10-08 22:21:56 得分 0

merlinran(天行者)   说得对,类的实例显然也是变量的一种,但是显然不是用随便的方法就可以交换的Top

24 楼julyclyde(Java初学(大学不教只好自己学))回复于 2002-10-08 22:33:35 得分 0

这种问题有意义吗?Top

25 楼FFTiger(烦烦虎)回复于 2002-10-08 23:14:41 得分 0

不用那麻烦吧,用的时候再加个指针,然后用指针来交换。哦,忘了,不能用第三个变量。我还是同意上面老兄的意见,没意义!相比而言,这点浪费不算什么,没必要专门为这写一段冗长的程序嘛。Top

26 楼sylmoon(专注Oracle)回复于 2002-10-09 13:37:16 得分 0

:)Top

27 楼muche(妖刀)回复于 2002-10-09 13:41:32 得分 0

好象是MS的题,就是以时间换空间,有多种方式,上面都有!  
  a=a+b  
  b=a-b  
  a=a-b  
  Top

28 楼lufly2000(凌绝顶)回复于 2002-10-10 15:49:21 得分 0

关注。。Top

29 楼lizhongkun(泛型)回复于 2002-10-10 16:43:30 得分 0

基本上就是   kbsoft(景乐)   (   的方法了!想不出来别的了Top

30 楼fdm_sea(klesh)回复于 2002-10-10 17:07:59 得分 0

楼主是希望什么呢?  
  Top

31 楼fangrk(加把油,伙计!)回复于 2002-10-10 17:10:25 得分 0

如果用模板做呢?  
  都只有考虑了int类型的  
   
  不用临时变量有什么好?我觉得这种题目无聊。Top

责任编辑: efish 参与评论 查找更多:
相关文章
不为名不为利,delphi小组的计划书,请朋友们进来!… 不为名不为利,delphi小组的计划书,请朋友们进来!!!
大家来评论深圳找工作 大家来评论深圳找工作
主页制作与数据库 主页制作与数据库
请帮忙解释这一几行matlab代码好吗?不懂blkproc函数… 请帮忙解释这一几行matlab代码好吗?不懂blkproc函数里参数的意思。
怎样得到图片的大小 怎样得到图片的大小
VB + SQL 表格列表显示数据的时候,10000条数据循环… VB + SQL 表格列表显示数据的时候,10000条数据循环读入要6秒,有没有快点的方法
请问如何让gif,jepg透明? 请问如何让gif,jepg透明?
请问c call,stdcall pascal call 是怎么定义的,有什… 请问c call,stdcall pascal call 是怎么定义的,有什么区别。
能查看表的大小吗? 能查看表的大小吗?
请教:yuv格式和RGB格式怎么转换?有这个说法吗?另… 请教:yuv格式和RGB格式怎么转换?有这个说法吗?另外有yuv格式的静态图片吗?
2秒记住本站域名

玩过泡泡龙吗?Readygo?Go! 再加上.Com.Cn的后缀,那就是大名小顶的readygo.com.cn

分类导航
Readygo技术搜索引擎