Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

You have to take overflow into account. In most cases, that would make the algorithm not very useful compared to just doing the swap with a third variable.


In two's complement arithmetic, you are basically computing modulo N (N = 2 to the power of the number of bits). So overflow will not interfere with the swap operation.


Hm I don't think overflow will apply. Anything it does in an add will be undone by a subtract?

Except that 2a, that might be trouble.


Imagine you only had 4 bit numbers (range 0-15) and you tried to do swap 14, 15 (1110, 1111). You can do that with xor but not with the add method, because you can't store a + b without a wider variable.


15 + 15 gives 14

14 - 15 gives 15


The way I wrote this was rubbish, edited. I was trying to get at if you have 1110, 1111 then 1110 + 1111 will overflow, but you could xor them.


  1110 + 1111 = 1101
  1101 - 1110 = 1111
  1101 - 1111 = 1110
Overflow doesn't matter if you just want to swap.


(Assuming two's complement arithmetic, as amelius pointed out - I don't know if all programming languages and platforms use it)


That's a really smart observation I hadn't made, thanks for explaining!




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: