Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Is there a case where bitwise swapping won't work?

At school someday several years ago I had to do a swap function that swaps two integers, I wanted to do this using bitwise operations without using a third variable, so I came up with this:

void swap( int * a, int * b ) {
    *a = *a ^ *b;
    *b = *a ^ *b;
    *a = *a ^ *b;
}

I thought it was good but when my function was tested by the school’s correction program it found an error (of course when I asked they didn’t want to tell me), and still today I don’t know what didn’t work, so I wonder in which case this method wouldn’t work.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

I wanted to do this using bitwise operations without using a third variable

Do you mind if I ask why? Was there a practical reason for this limitation, or was it just an intellectual puzzle?

when my function was tested by the school’s correction program it found an error

I can’t be sure what the correction program was complaining about, but one class of inputs this sort of solution is known to fail on is exemplified by

int x = 5;
swap(&x, &x);
printf("%d\n", x);

This prints 0, not 5.

You might say, "Why would anyone swap something with itself?"
They probably wouldn’t, as I’ve shown it, but you can imagine that, in a mediocrely-written sort algorithm, it might do the equivalent of

if(a[i] > a[j]) swap(&a[i], &a[j]);

Now, if it ever happens that i == j, the swap function will wrongly zero out a[i].

See also What is the difference between two different swapping function?

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading