不耻下问:Java语言为什么交换两个整数需要用第三个数,而交换两个数组就不需要了呢
通过连续异或可以实现不引入第三个数交换吧
//
变量都是有地址的如下表:
byte a1=25
byte a2=30
如要交互两个数,必须要开辟新的内存空间或采用寄存器。以内存地址空间为例,
现申请新的内存空间 byte temp;
现在进行数据交换。
步骤1: temp<-a1 此时数值 a1=temp=25;
步骤2:a1<-a2 此时a1=a2=30;
步骤3:a2<-temp 此时a2=temp=25
结果 a1=30 ,a2=25;
//正文
Int a=25
Int b=30
由于int占用4个字节
此种问题可通过更为底层的操作如汇编语言,我汇编忘的差不多了,下面只是为了表现数据的移动方法。
Mov ax 25;
Mov bx 30;
Mov ah bl;
Mov al ah;
Mov bl ah;
Mov ah 0; //对高端字节归零
//当然这个对数值的取值范围会有要求的。
总的来说交换数据其实是对空间的分配和控制。和几个变量没有直接关系。但表象是要通过变量来进行控制的。
个别算法用不着第三个值,但是基本上都要第三个值做中转
一个值就是一个地址,不用第三个值的话,转不过来的