其他分享
首页 > 其他分享> > 无辅助空间交换值的三种方式【所有语言通用】

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

作者:互联网

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

这里分享三个交换方式:

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;

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

标签:辅助,int,交换,unsigned,三种,numA,numB,0x100
来源: https://blog.csdn.net/Non_function/article/details/121452249