标签:辅助 int 交换 unsigned 三种 numA numB 0x100
两个变量,如何在没有辅助空间的情况下交换值?
这里分享三个交换方式:
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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。