两个变量,如何在没有辅助空间的情况下交换值?
这里分享三个交换方式:
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;
小学数学搞定两值无辅助空间交换,非常哇塞。