它的交换操作表现如何?
a=a+b
b=a-b
a=a-b
我不同意把它和一本书交换!!!
这本书的选项包括“a和b的补集”、“否定a和b”。希望这些选项也不会让你满意吗?
正确的算法应该是:
a = a + b
b = a - b
a = a - b
使用异或(XOR)执行交换操作,通常用圆圈内的加号表示;例如:
a := 5
b := 7
a := a xor b (2)
b := a xor b (5)
a := b xor a (7)
最近我参加了一次Java新手的面试,面试官让我一行代码内完成两个数字的交换。
不使用临时变量,也可以在一行代码中完成两个数字的交换。
其逻辑非常简单,
在同一行内将x与y相加,同时将y赋值为x减去它们的和。
执行这个算术操作后,这两个数字就会被交换(仅用一行代码)。
public class SwapInOneLine {
public static void main(String[] args) {
int x = 10; int y = 20;
System.out.println("Before Swaping: x = " + x + " and y= " + y);
x = x + y - (y = x);
System.out.println("After Swaping: x = " + x + " and y= " + y);
}}
输出:
交换前:x = 10,y = 20
交换后:x = 20,y = 10
a = a ^ b
b = a ^ b
a = a ^ b
其中'^'表示XOR。 结果: a = 7,b = 5
实际上,有两种方法可以做到:
int a = 5, b = 10;
使用加法(+)和减法(-)
a = a + b;
b = a - b;
a = a - b;
使用多个(*)和除法(/)
a = a * b;
b = a / b;
a = a / b;
a = a⊕b
...更常见的是“交换两个寄存器的值,一次写入一个寄存器,不使用第三个寄存器”)。 (“书籍选项”是什么意思?) - greybeard