不通过第三变量交换两个数的值(不断更新ing,求补充)

方法一:

网上最常见的方法一,通过  ^ 符交换两个值。

x ^= y;
y ^= x;
x ^= y;
但是,当x与x 交换的时候。这种方法就炸了

x ^= x = 0...

呃,为什么要考虑 x ^= x;?

看下下面的代码吧:

<span>		</span>int []arr = { 1,2,3,4,5 };
		for (int i = 0; i < (arr.length/2) + 1; i++ ) {
		    arr [i] ^= arr[arr.length-1-i];
		    arr [arr.length-1-i] ^= arr[i];
		    arr [i] ^= arr[arr.length-1-i];
		}
		for (int i = 0; i < arr.length; i++) {
		    System.out.print(arr[i]);
		}
<span>		</span>// 输出 5 4 0 2 1


方法二:

网上最常见的方法,通过 + ,- 法交换

x = x + y;
y = x - y;
x = x - y;

这种方法,跟方法一一样,当x 与 x 交换的时候也炸了。

x = x + x;  x = x - x = 0;

方法三:

x = x * y;
y = x / y;
x = x / y;
原理同上,爆炸方式也一样。


感觉前三种的原理都是一样的,

x = x 与 y 做某种运算, 

y = (运算结果 x) 运算方式 (x) ,  

x = (运算结果 x) 运算方式 (y) ,


然后是今天新发现的两种方法:

方法四:

x = x + y - (y = x);

方法五:

x = y + (y = x) *0;


这两种方法利用的是运算符的优先级,

目前没发现哪里会爆炸。


根据方法四与方法五原理,

推出方法六:

x = y * x / ( y = x);


不过,根据计算机计算的原理,做加法运算会更快一些。



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值