我正在阅读一本名为《定量金融面试实用指南》的访谈书,这是一个关于算法的问题,我无法理解使用XOR的解决方案。
问题:
如何在不使用额外存储空间的情况下交换两个整数i和j?
本书提供的解决方案:
利用x ^ x = 0和0 ^ x = x的事实(注意:^是按位运算符XOR):
void swap (int &i, int&j){
i = i^j;
j = j^i; //j = i^(j^i) = i
i = i^j; //i = (i^j)^i = j
}
任何专家都可以提供一些指导吗?非常感谢您的建议:)