交换两个变量的值,不使用第三个变量的方法

来源:互联网 发布:淘宝神经猫 编辑:程序博客网 时间:2024/06/02 02:50

每天一道题

本人把我自己学习JAVA的一些笔记心得写出来,大家一起交流,每天一道题,有些是传授的面试题,有些是我记得的一些做过的题,希望对初学者有帮助。我们还是按照Java的学习顺序来,开始是SE部分。

OK,言归正传,进入今天的学习。

今天上课,老师说到研究生面试,他问了一位学生,说怎么用计算机实现求 2*8 的结果?当时就把学生问懵了。显然这里老师问的是最高效率,当然在微机原理我们已经学过,我觉得应该是:

System.out.println(2 << 3);

这是因为算数右移一位相当于有符号数除以2,逻辑左移一次相当于无符号数乘以2,逻辑右移一次相当于无符号数乘以2。

好了,这只是个引子,今天的问题是:

Q1: 我们都知道交换两个数的数值可以用三行代码解决,这是在C语言中就学过的:

int c;c = a;a = b;b = c;

但是我们如果把两个整数数值设置得非常大,那么就会超出int的范围,会发生强制转化,这是显然很令人郁闷的。如果有要求不能用第三个参数来进行交换操作呢?

数学老师可能会给我们这个建议:

a = a + b;b = a - b;    //b=a+b-b=aa = a - b;    //a=a+b-a=b

看似很完美了,可是面试的时候可能这个还不是面试官想要的答案,我觉得我能写出来的最好的代码就是下面这个了,欢迎大家指教:

a = a ^ b;   b = a ^ b;    //(a^b)^b=aa = a ^ b;    //(a^b)^a=b

按位运算符-异或的性质:a^b^b=a

关于位运算,大家可以看看这篇博客,写的还是很全的:

http://blog.csdn.net/is_zhoufeng/article/details/8112199

好了,今天就这样了。

晚安!

0 0
原创粉丝点击