本文主要是介绍如何不使用新变量进行两数互换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在学C++过程有一章节看到了一个内容:不使用第三变量就可以实现两数互换
当时我很疑惑是怎么做到的。看到了它用到了异或运算符 ^
于是百度了下 看到了这位老哥的文章https://blog.csdn.net/zxm1306192988/article/details/50446399#commentsedit
自己尝试了下发现真的互换了
#include <iostream>
using namespace std;int main()
{int a = 10, b = 15;a ^= b ^= a ^= b;cout << a << endl << b << endl;system("pause");return 0;
}
我就想为什么可以这样做,其实上面那篇博客已经有它的原理,不过可能还有人不清楚,我就来说说我的理解
比如:二进制数 1011 和 0101 ,它们进行异或的结果是 1110
结果保存了 这两个二进制数各自的位和对方的位是一样还是不一样(我叫作状态,1就是不一样,0就是一样)
比如说(按左到右的顺序):
1和0比较,这两位不一样,结果保存状态1(代表它们是不相同的)
0和1比较,这两位不一样,结果保存状态1(代表它们是不相同的)
1和0比较,这两位不一样,结果保存状态1(代表它们是不相同的)
1和1比较,这两位一样 , 结果保存状态0(代表它们是相同的)
然后我用1011和结果1110(状态保存)相异或(按左到右)
(其实这个时候是看结果(状态保存)是1还是0然后决定原来的二进制数取什么值)
1和1比较,(后面的1表示原本两个二进制数是不相同的)前面的1就要取反,结果为0
0和1比较,(后面的1表示原本两个二进制数是不相同的)前面的0就要取反,结果为1
1和1比较,(后面的1表示原本两个二进制数是不相同的)前面的1就要取反,结果为0
1和0比较,(后面的0表示原本两个二进制数是相同的)前面的1就不变, 结果为1
于是1011(原来的二进制数)和1110(结果)相异或的结果是0101(原来的二进制数)就得到了原来的另一个二进制数。
这篇关于如何不使用新变量进行两数互换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!