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

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

这里分享三个交换方式:

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;

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

上一篇:http://39.98.219.132 题库标准答案(题库序号:439)之合影效果


下一篇:CPU和内存的架构 UMA和NUMA