today i practised selection sorting algorithm with following

Code:
#include <stdio.h>
#include <stdlib.h>

#define LEN 10

void swap(int *a,int *b)
{

        /*
        int temp = *a;
        *a = *b;
        *b = temp;

        */
        *a = *a ^ *b;
        *b = *a ^ *b;
        *a = *a ^ *b;
}




void selection_sort(int *arr, int len)
{
        int i = 0;
       for(;i<len-1;i++)
        {
                int j=i+1,min=i;
                for(;j<len;j++)
                {
                        if(arr[j] < arr[min])
                        {
                                min = j;
                        }
                }
                swap(&arr[min],&arr[i]);
        }
}

int main()
{
        int *a = malloc(sizeof(int) * LEN);
        int i = 0;

        for(;i<LEN;i++)
        {
                a[i] = rand()%300;
                printf("%d\t",a[i]);
        }
        printf("\n");

        selection_sort(a,LEN);

        for(i=0;i<LEN;i++)
        {
                printf("%d\t",a[i]);
        }
        printf("\n");
        free(a);
}

if i use code block
int temp = *a;
*a = *b;
*b = temp;

csxia-laptop:/data/learning/C/DataStructure # ./selection_insert
283 286 177 115 293 235 286 192 249 121
115 121 177 192 235 249 283 286 286 293


it works fine , but if i use the latter code block
*a = *a ^ *b;
*b = *a ^ *b;
*a = *a ^ *b;
then a and b's value will get zero if the address of a and b is the same

csxia-laptop:/data/learning/C/DataStructure # ./selection_insert
283 286 177 115 293 235 286 192 249 121
115 121 0 192 235 249 283 0 286 293


i have no idea why, anyone who can help me???