题目:交换两个int类型变量a,b的值
方法一:使用第三个变量
置换代码如下:
public void swap(int a, int b){
// 设定一个临时变量
int temp;
temp = a;
a = b;
b = temp;
}
方法二:使用异或运算符
首先需了解异或运算符的运算方式和特性。
- 异或运算符的运算方式:相同为0,不同为1。即,
设
a = 11011
b = 10101
则,
11011
^ 10101
————
01110
得
a^b = 01110
- 异或运算符的特性:
- 0和任何数异或都为此数,即,0^a = a
- 任何数和自己异或都为0,即,a^a = 0
- 满足交换律,即 a^b = b^a
- 满足结合律,即 a^b^c = a^(b^c)
置换代码如下:
public void swap(int a, int b){
a = a^b;
b = a^b;
a = a^b;
}
解析说明,假设此时 a = 甲, b = 乙
- 步骤一:运行 a = a^b,则此时,a = 甲^乙,;b不变,b = 乙
- 步骤二:运行 b = a^b,则此时,a不变,a = 甲^乙;b = a^b = (甲^乙)^乙,根据异或运算的特性,b = 甲^(乙^乙) = 甲^0 = 甲
- 步骤三:运行 a = a^b,则此时,a = a^b = (甲^乙)^甲 = 甲^甲^乙 = 0^乙 = 乙;b不变,b = 甲
完成置换