How to swap without a third variable?

前端 未结 6 1233
死守一世寂寞
死守一世寂寞 2020-12-29 14:12

I have to swap two variables with a number value without using a third variable. What is the simple solution?

相关标签:
6条回答
  • 2020-12-29 14:20

    Here we have this in MIPS assembler. The first solution is long and bad. The second one with XOR is better.

    addi $t0, $0, -5
    addi $t1, $0, 15
    
    add $t0, $t0, $t1
    sub $t1, $t1, $t0
    nor $t1, $0, $t1
    addi $t1, $t1, 1
    sub $t0, $t0, $t1
    
    ####
    
    xor $t0, $t0, $t1
    xor $t1, $t0, $t1
    xor $t0, $t0, $t1
    
    0 讨论(0)
  • 2020-12-29 14:22
     int x = 15;
     int y = 5;
    
     x = x + y;
     y = x - y;
     x = x - y; 
    
    0 讨论(0)
  • 2020-12-29 14:23

    You can achieve it with XOR

    int A = ...;
    int B = ...;
    A = A ^ B;
    B = A ^ B;
    A = A ^ B;
    
    0 讨论(0)
  • 2020-12-29 14:25

    Another popular way is the XOR swapping strategy. http://en.wikipedia.org/wiki/XOR_swap_algorithm

    0 讨论(0)
  • 2020-12-29 14:32

    Depending on the type of variable, you can use Interlocked.Exchange. This uses an atomic operation to do the swap.

    0 讨论(0)
  • 2020-12-29 14:33

    Let us see one of the method namely by using arithmetic operators. Consider 2 variables say x=50 and y=70 and let us see how to swap the value of two variables that is make x=70 and y=50 without using third variable. This can be done by using following arithmetic operations namely
    x= x + y
    y= x - y
    x= x - y
    Which gives
    • x= x + y gives x= 70 + 50 an so x is equal to 120
    • y= x - y gives y = 120 - 70 which makes the value of y as 50
    • x= x - y gives x= 120 - 50 and thus value of x becomes 70

    0 讨论(0)
提交回复
热议问题