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

© Xiiian 中级黑马   /  2015-11-26 22:34  /  1728 人查看  /  9 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
Java基础,两个变量的数值互换。
这里只考虑Java语言,因为不同语言的机制不同,Java可以执行的,C未必可以,而C可以的,Java也未必能行,
毕竟每种语言都有自己独特的魅力~。◕‿◕。
*/

/*
1:最简单,最好理解的方法:引入第三个内存,即设置第三个变量。
假如有一瓶可口可乐和一瓶雪碧,现在想用可口的瓶子装雪碧,用雪碧的瓶子装可口(不要问我为什么要换瓶子,就是任性╮(╯3╰)╭),
这个方法就是再找个空瓶。
*/
temp = a;
a = b;
b = temp;

/*
2:这里是位运算,在计算机底层操作。
位异或特点:左右两边是数据,相同为0,不同为1。某一个数对另一个数异或两次得到的结果是其本身。
*/
a = a^b;      //将a^b赋值给=>a,此时a的值是a^b;
b = a^b;      //(a^b)^b => b,这时b就变成a原来的值了;
a = a^b;      //(a^b)^((a^b)^b) => a,将a变成b。



/*
2.1:注意!不要轻易尝试压缩代码,要是写成下面这种就错啦!a会变成0……
*/
a^=b^=a^=b;


/*
2.2:但是写成下面这种就可以,原因嘛,我也不知道_(:3 」∠)_
*/
a^=b^=a;
b^=a;


/*
3:不用第三个变量,而引入第三个数据的方法,就是加减乘除法。但是要注意!变量数值较大时可能会溢出。
*/
a = a+b;      //a+b => a
b = a-b;      //(a+b)-b => b
a = a-b;      //(a+b)-((a+b)-b) => a

/*
3.1:
*/
a = a-b;
b = a+b;
a = b-a;

/*
3.2:用这种方法时又多了一个限制:b不能为0。
*/
a = a*b;
b = a/b;
a = a/b;

/*
4:加减乘除赋值混合法~简直像和稀泥ಥ_ಥ
*/
a = b + (b = a)*0;

/*
这是充分利用运算符的优先级别和顺序做出来的,首先要了解两件事。
赋值运算符的优先级别是很低的,并且运算顺序是从右至左。
也就是说b = a + ( a = b ) * 0会先算右边的a + ( a = b ) * 0。
加法运算符的优先级别比赋值运算高,并且运算顺序是从左至右。
所以a + ( a = b ) * 0会先计算左边的a,然后再计算( a = b ) * 0,就是这个顺序使得a的值可以暂存。
剩下的事情就是把a=b这个表达式的值给消掉了,方法也很简单。
*/

/*
4.1:
*/
a = a + b - (b = a);

/*
5:加减乘除还能组合出很多好玩的方法~
*/
a = a-b;            //a-b=>a
b = a+2*b;       //(a-b)+(b+b)=a+b=>b
b = (a+b)/2;    //((a-b)+((a-b)+(b+b)))/2=a=>b
a = b-a;           //a-(a-b)=b=>a


/*
除了三变量方法外,其他方法要么在计算机底层操作,要么进行算数运算,除了在新手面前装X外还有其他作用嘛? (╯‵□′)╯︵┻━┻
一:运行速度慢;
二:一定程度上影响了代码的直观;
三:加减,乘除及其他花样的交换有溢出问题。
所以三变量交换法远比这些花样作死的运行快,而且清晰直观。
在现代的计算机编程中,内存的使用量都是极大的,多一个变量内存完全可以忽略,倒是时间的考量越发严格,
假如在一个需要进行大量交换操作,同时又需要保证稳定性的程序中,三变量法却是最好的选择。

没想到最后,看起来最朴实的却是最优秀的~
所以作为朴实的敲代码的程序猿(媛)们是最棒哒~ (╭ ̄3 ̄)╭♡
*/

评分

参与人数 1黑马币 +2 收起 理由
橘子果酱 + 2 赞一个!

查看全部评分

9 个回复

倒序浏览
总结很好,慢慢形成自己的体系。你可以收获很多
回复 使用道具 举报 1 0
虽然这是个小问题,但是你总结的很详细,很值得学习啊
回复 使用道具 举报
跟ios好多也一样,学习了
回复 使用道具 举报
666                             
回复 使用道具 举报
我是总结那么好
回复 使用道具 举报
总结的很好  有自己的理解
回复 使用道具 举报
值得学习,要自己总结知识啊
回复 使用道具 举报
DaYe 中级黑马 2015-11-27 23:38:50
9#
很好赞一个
回复 使用道具 举报

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