如果变量是相同的存储位置,为什么XOR交换算法会失败,但如果变量是相同的值则不会失败

时间:2017-06-13 07:01:12

标签: algorithm swap xor

如果我使用具有相同值的XOR交换算法,则交换不会失败:

void (Class::*)(Class*, ArgTs...)

如果我使用指针,交换失败(x将为零):

#include <stdio.h>
int main()
{
  int x = 10, y = 10;

  x = x ^ y;
  y = x ^ y;
  x = x ^ y;

  printf("After Swapping: x = %d, y = %d", x, y); // prints "After Swapping: x = 10, y = 10"

  return 0;
}

算法是否会以相同的值失败?如果我只使用布尔代数,当我进行第一次XOR运算时,交换将失败(第一个参数将变为零)。

编辑:明确“失败”是指

1 个答案:

答案 0 :(得分:1)

让我们一步一步地运行这两种情况。

案例#1:2个变量,相同的值

#include<iostream>
#include<vector>
using namespace std;

int main() {
    // your code goes here
    vector<int> v;

    for(int i=0;i<10;i++){
        v.push_back(i);
        cout<<v.size()<<" "<<v.capacity()<<" "<<"\n";
    }

    return 0;
}

在这种情况下,x y 10 10 *run x = x^y* 0 10 *run y = x^y* 0 10 *run x = x^y* 10 10 位置保存值,它可以生成正确的结果。现在,让我们看看案例#2。

案例#2:一个位置,比如x。

y

对于所有未来的陈述,0 ^ 0给出0.因此o / p。