无辅助空间交换值的三种方式【所有语言通用】

两个变量,如何在没有辅助空间的情况下交换值?

这里分享三个交换方式:

1. 左右移操作【位运算】

        一个unsigned型数据占4字节,32位,在给出的两个数字并没有超过65535的情况下可以使用如下代码实现交换:

unsigned numA{0x100};
unsigned numB{0x200};
numA <<= 16;
numA |= numB;
numB = numA;
numA &= 0x0000ffff;
numB >> 16;

        原理是把本变量剩余的内存空间存分利用,使他间接的充当了辅助空间。不建议使用该方法操作负数。

2. 异或运算【位运算】

        密码学小技巧,A^B^B等于A,基于此原理可以直接对两个变量进行数值交换:

int numA{0x100};
int numB{0x200};
numA ^= numB;
numB ^= numA;
numA ^= numB;

3. 数学技巧

int numA{0x100};
int numB{0x200};
numA += numB;
numB = numA - numB;
numA -= numB;

小学数学搞定两值无辅助空间交换,非常哇塞。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值