C語言函數:用位運算交換的方法交換兩個變量值


void inplace_swap(int *x, int *y)
{
    *y = *x ^ *y; //Step 1
    *x = *x ^ *y; //Step 2
    *y = *x ^ *y; //Step 3 
}

int main()
{
    int num1 = 100;
    int num2 = 200;
    inplace_swap(&num1, &num2);
    printf("num1=%d\nnum2=%d\n", num1, num2);
    return 0;
}

    相比使用一個局部變量來交換兩個變量的值,這種方法並無性能上的優點,只是一種對位運算的練習。數組

    一個數與它自己異或,結果爲0。假設*x = a;*y = b;函數


*x
*y
Step0
a
b
Step1
a
a ^ b
Step2 a ^ a ^ b ( = b)
a ^ b
Step3 b
a ^ b ^ b ( = a)

    不過,須要注意,*x與*y指向同一個位置時,*x與*y指向的數變爲0性能

    例如將一個數組中的元素首尾對調的時,使用下面的函數spa

    void reverse_array(int a[], int cnt)
    {
        int first, last;
        for (first = 0, last = cnt - 1; first <= last; first++, last--)
        {
            inplace_swap(&a[first], &a[last]);
        }
    }

    若是數組長度爲奇數是,中間的數會變成0
code

相關文章
相關標籤/搜索