交换两数方法对比

    xiaoxiao2025-04-10  24

    交换两数异或方法和临时变量方法对比

    异或运算

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

    临时变量方法

    void swap(int &a, int &b) { int tmp = a; a = b; b = tmp; }
    异或方法的缺点

    对于临时变量法,每次赋值只要读取一个变量的值到寄存器,然后再从寄存器写回到另一个变量中即可,前后涉及两次内存写入操作;但是对于异或运算操作,每次都需要读取两个数据到寄存器中,再进行运算操作,之后把结果写回到变量中,前后共需要三次内存写入操作。另外一点,异或操作的代码可读性差。 参考 链接

    异或方法的隐患

    现在交换arr数组下标为i和j的元素,为了简化代码,没有对i和j相等的情况作特殊处理,导致有一种情况,i == j下:

    swap(data[i], data[j]);

    在执行了 arr[i] = arr[i] ^ arr[j] 后,arr[i] = arr[j] = 0。

    最新回复(0)