A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 熊永标 中级黑马   /  2013-3-29 15:39  /  1126 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

两个数交换位置有三种算法,分别为:
int a=8;
int b=7;

第一种:第三方变量
      int temp=a;
      a=b;
      b=temp;
第二种:计算总和
       a=a+b;
       b=a-b;//得到a
       a=a-b;//得到b
第三种:异或位运算
      a=a^b
      b=a^b//a^b^b
      a=a^b//a^(a^b)
总结:第二种和第三种利用的是同一种思想,就是计算一个数与要进行换位的值相关,然后通过反相计算,最后得取结果

1 个回复

正序浏览
本帖最后由 贺靖轩 于 2013-3-29 16:36 编辑

呵呵 我混个分 补充点细节
关于第一种:毕老爷推荐使用,为啥?码农大神都看得懂。
关于第二种 : 如果这个两个数字相当大,则会有数据泄漏的危险。如 INT类型的两个数字,2147483648 与 2147483647的交换,写个小程序运行下就发现问题了
关于第三种:如果你像我一样喜欢简约风格的话,这里还有一种方式来兼容我们简单粗暴的思维:
                  a^=b;
                  b^=a;
                  a^=b;
O 了。


评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 呵呵,新人加油~

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马