设变量a,b均为int类型,且均以赋值,现要求不用第三个变量来交换a,b的值.
我的思路是这样的:
任意找两个互为逆运算的运算(比如+和-,×和/,^和^等,其中^代表异或运算)进行如下类似运算
以+和-为例:
a = a + b;
b = a - b;
a = a - b;
以×和/为例:
a = a * b;
b = a / b;
a = a / b;
以^为例:
a = a ^ b;
b = a ^ b;
a = a ^ b;
值得注意的是:+和×的两个操作数可以互换,但是—和/的两个操作数不能互换,所以也可以有以下交换方式
以+和-为例:
a = a - b;
b = b + a;
a = b - a;
或
a = b - a;
b = b - a;
a = a + b;
以×和/为例:
a = a / b;
b = b * a;
a = b / a;
或
a = b / a;
b = b / a;
a = a * b;
所以,我猜想:只要是两个互为逆运算的运算符都可以通过以上形式的运算来交换俩整数的值。
当然,实际中只有异或形式的交换才有价值且对于任何类型都适合,其他都会产生溢出。
欢迎大家批评指正,在下先谢谢各位!
我的思路是这样的:
任意找两个互为逆运算的运算(比如+和-,×和/,^和^等,其中^代表异或运算)进行如下类似运算
以+和-为例:
a = a + b;
b = a - b;
a = a - b;
以×和/为例:
a = a * b;
b = a / b;
a = a / b;
以^为例:
a = a ^ b;
b = a ^ b;
a = a ^ b;
值得注意的是:+和×的两个操作数可以互换,但是—和/的两个操作数不能互换,所以也可以有以下交换方式
以+和-为例:
a = a - b;
b = b + a;
a = b - a;
或
a = b - a;
b = b - a;
a = a + b;
以×和/为例:
a = a / b;
b = b * a;
a = b / a;
或
a = b / a;
b = b / a;
a = a * b;
所以,我猜想:只要是两个互为逆运算的运算符都可以通过以上形式的运算来交换俩整数的值。
当然,实际中只有异或形式的交换才有价值且对于任何类型都适合,其他都会产生溢出。
欢迎大家批评指正,在下先谢谢各位!
解决方案 »
- 实用JSP标签,分页条,延迟跳转链接 ++++++ 散分
- 请帮我理清一个概念,求助
- 一个很简单的socket通信问题,请高手看一下
- oscache 在unix下的配置和使用问题(再次发送严重)
- 在一个界面用socket同时进行 双机通信 和 文件传输 怎么解决?
- 求关于数字的正则表达示
- 窗口三个按钮程序的错误,请帮忙解决!(书中原例子)
- 想知道局域网内有哪些用户共享了文件,用java该怎么实现呢
- 昨天重新G到书店翻了一下《JAVA编程思想及实践》,发现这本书非常适合初学者。我觉得我们这些初学者应该先看完这一本再看Thinking in jav
- 使用迭代器时出现了错误:不兼容的类型:Object无法转换为Employee。求大神点播为什么?
- 昨天考程序员,卖笔的拿错笔给我了,害我用的是HB填的答题卡。555555555555好难过啊。这样读卡机是不是读不出来了啊、
- 新手问题
如果a=3;b=2
就出问题了。
public class Test {
public static void main(String[] args) {
System.out.println(Test.max(199, 311));
}
public static int max(int a, int b){
int c = 0;
c = (a + b + Math.abs(a - b))/2;
return c;
}
}
感觉这样还是用到了 ?: 因为 Math.abs 就是用 ?: 实现的啊。