位运算实现两数交换

986 阅读1分钟

前提

要交换的两个数的位置不相同时(不是同一块内存)可以用异或运算实现交换

例子

#include <stdio.h>

int main()
{
    int a = 12;
    int b = 24;

    // 交换
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;

    printf("a = %d, b = %d\n", a, b);
    return 0;
}

a = 24, b = 12

原理

a = a ^ b
b = a ^ b = a ^ b ^ b = a
a = a ^ b = a ^ b ^ a = b

两个位置相同的数错误交换

a与b位置相同
a = a ^ b = a ^ a = 0 此时a,b都指向同一片内存,都为0