当前位置: 代码迷 >> C语言 >> 一道面试题 很有意思请留笔
  详细解决方案

一道面试题 很有意思请留笔

热度:179   发布时间:2008-04-04 10:41:56.0
一道面试题 很有意思请留笔
(C语言实现):
[bo][un]不通过[/un][/bo]第三变量交换a,b的值
搜索更多相关的解决方案: 面试  变量  C语言  

----------------解决方案--------------------------------------------------------
a=a+b;
b=a-b;
a=a-b;
----------------解决方案--------------------------------------------------------
同上,在群里说过的。
----------------解决方案--------------------------------------------------------
回复 1# 的帖子
可不可以用传值的方式改变变量的值?
----------------解决方案--------------------------------------------------------
回复 2# 的帖子
厉害厉害~
----------------解决方案--------------------------------------------------------
一个很旧的问题。。
----------------解决方案--------------------------------------------------------
回复 1# 的帖子
还有一种方法,就是通过位运算实现:
a=a^b;
b=b^a;
a=a^b;
"^"异或
本帖最近评分记录
  • cosdos +3 让知道了一种不错的方法。 2008-4-4 15:03
2008-04-04 06:27:59
cosdos

来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2107
专家分:1364
注 册:2007-6-19
  得分:0 
a=a+b;
b=a-b;
a=a-b;

// 这种方法并不好。如果 a + b 超出了 a 这种数据能够表示的范围呢

其实最好还是通过,第三个临时变量的方式。

// 实际编程中并不适合,不过对于智力题是非常不错的。

//------------------------------------------
//  ^ 对于整形非常合适  //
//----------------------//
a=a^b;
b=b^a;
a=a^b;


[[it] 本帖最后由 cosdos 于 2008-4-4 15:01 编辑 [/it]]
----------------解决方案--------------------------------------------------------
/***************************************************************************

(a = 20)     == 00010100;
(b = 25)     == 00011001;

(a = a ^ b)  == 00001101;
(b = b ^ a)  == 00010100;
(a = a ^ b)  == 00011001;

***************************************************************************/

----------------解决方案--------------------------------------------------------
据说我是新来的老手~嘿嘿
----------------解决方案--------------------------------------------------------
  相关解决方案