惊叹,交换操作竟然可以不借助第三个中间数

今天在读《程序员的自我修养》时,第四章讲静态链接的开头,给出的实例程序中,有一个函数swap函数这样写的:

void swap(int * a, int* b){

       *a ^= *b ^= *a ^= *b;

}

叹为观止啊,我们通常想,先把a=b赋值,如果不借助第三方数,此时剩余信息已经只是关于原先的b的信息了,而上述代码则相当于:

a = a' # b', b = (a' # b') # b' = a', a =( (a' # b') # b' )  # (a' # b') = b' ,这里#表示异或操作,也就是二进制加, a',b'分别表示原始的数值

多读好书,收益匪浅啊~

 

补充:今天才发现,这其中是有限制的,就是a和b不能相等的。。。,否则就是赋值0了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值