我的按位交换不起作用

My bit-wise swapping isn't working

本文关键字:不起作用 交换 我的      更新时间:2023-10-16

我正在尝试简单的插入排序。但是当我使用按位操作时,我正在尝试的交换不起作用。

但是当我使用另一个临时变量时,交换有效。当我编译这段代码时,我总是得到一些额外的0。

如何找出我的代码出了什么问题?

#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<algorithm>
using namespace std;
void swap(int* a, int* b)
{
*a=*a^*b;
*b=*a^*b;
*a=*a^*b;
}
int main(void)
{
int arr[size];
int i,j,min;
for(i=0; i<size; i++)
    arr[i]=rand()%100;
for(i=0; i<size; i++)
    printf("%d ",arr[i]);
putchar('n');
for(i=0; i<size;i++)
{
    min=i;
    for(j=i+1;j<size;j++)
        if(arr[j]<arr[min])
            min=j;
    swap(&arr[i],&arr[min]);
}
for(i=0; i<size; i++)
    printf("%d ",arr[i]);
putchar('n');
return 0;
}

in

for(i=0; i<size;i++)
{
    min=i;
    for(j=i+1;j<size;j++)
        if(arr[j]<arr[min])
            min=j;
    swap(&arr[i],&arr[min]);
}

如果 arr[i] 是最小的数组元素,则尝试将其与自身交换,因此传递给 swap 的两个指针指向相同的内存位置,因此 xor 将该位置归零。

既然你使用的是插入排序,我可以假设这是一个练习吗?

您认为当ab引用同一地址时,swap会怎么做?在一张纸上尝试一下,你会看到你多余的零来自哪里。