java基础复习(7)--值传递和交换变量值(异或)
对于java中的方法参数传递是传值方式,最典型的是,java中无法实现交换两个数值的方法,但C#和C++可以。C++总所周知是通过指针可以直接访问实参。而C#使用ByRef声明就可以实现。不利用自己提供的临时变量,两个数交换:
方法一:
a = a+b;
b = a-b;
a = a-b;
但是这样需要考虑到a+b溢出的问题。
还有可以利用异或运算实现。
方法二:
void swap(int &a,int &b)
{
a^=b;
b^=a;
a^=b;
}
原理理解如下:
a-------------------------b
a^=b a^b-----------------------b
b^=a a^b-------b^(a^b) => a
a^=b a^b^(a) => b-----------a
OK b-------------------------a
要知道,a^b=c => a^c=b;a^c=b;
即只要直到a,b,c中的任意两个,即可利用异或运算退出另外一个数。
<div class="t_msgfont">RAID里面就用到了这技术。三个里面知道任意两个就可以恢复第三个,磁盘位的恢复的一种手段。
页:
[1]