a ^= b ^= a ^= b看到了一个不需要中间变量交换两个的得方法

形式是这样的:

a ^= b ^= a ^= b

It swaps a and b without using a temporary.

用了一堆的XOR操作,猛地一看有点晕。。。

其实只是装的高深了而已。。。我们这样看:

a ^= (b ^= (a ^= b));

或者直接这样写好了:

a^=b;

b^=a;

a^=b;

这样子看起来就舒服多了,然后我们来分析一下:

首先说一下^这个运算符,XOR运算符很多人应该都明白,就是按位运算,相同为0,不同为1.

这个例子很好的利用了这个特性。

a^=b;//a此时为a XOR b的值,这样很巧妙的用a保存了a与b的差异存在的地方,即凡是a中为1的地方,均是a与b不同的地方

b^=a;//b = b xor a;这很好理解了,将b中所有与a不同的地方置反,此时的b就是a了。

a^=b;//这句和第二句的意思是近乎相同的。

其实这样的交换方法,只是巧妙的将a和b的信息藏在了其中的一个变量中,从某种程度来说,交换总是需要一个媒介的。所谓的不需要中间变量的做法,其实也都是采用了一些巧妙的思路,使信息隐藏在变量中了。

不过这些思路还是很值得学习的,蛮发散的。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值