交换两个变量的值,不使用第三个变量的方法
2016-11-13 22:27
573 查看
每天一道题
本人把我自己学习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=a a = a - b; //a=a+b-a=b
看似很完美了,可是面试的时候可能这个还不是面试官想要的答案,我觉得我能写出来的最好的代码就是下面这个了,欢迎大家指教:
a = a ^ b; b = a ^ b; //(a^b)^b=a a = a ^ b; //(a^b)^a=b
按位运算符-异或的性质:a^b^b=a
关于位运算,大家可以看看这篇博客,写的还是很全的:
http://blog.csdn.net/is_zhoufeng/article/details/8112199
好了,今天就这样了。
晚安!
相关文章推荐
- 交换两个变量的值,不使用第三个变量的四种方法
- 交换两个变量的值,不使用第三个变量的四种方法
- 交换两个变量的值,不使用第三个变量的四种方法
- 交换两个变量的值,不使用第三个变量的四种方法
- 交换两个变量的值,不使用第三个变量的四种法方法
- 交换两个变量的值,不使用第三个变量的四种法方法
- 交换两个变量的值,不使用第三个变量的四种方法
- 交换两个变量的值,不使用第三个变量的方法及实现
- 浅谈不使用第三个变量交换两个变量的值的方法
- 交换两个变量的值,不使用第三个变量的四种方法
- 交换两个变量的值,不使用第三个变量(两种方法)
- 不使用第三个变量,实现交换两个变量的值
- 不使用第三个变量,实现两个变量值的交换
- 交换两个变量的值不使用第三个变量
- 不用第三个变量交换两个参数值得5种方法
- 交换两个变量值,但不使用第三个变量的算法
- 不使用第三方变量交换两个变量值的三种方法
- 不使用第三个变量交换两个int类型变量的值
- 不引入第三个变量交换两个变量的方法
- 不使用第三个变量交换两个数值。