不借助第三个临时变量交换两个数的值:位运算笔记

    xiaoxiao2024-12-18  10

    使用位运算交换两个数的值

    void swap(int *x, int *y){ //假设原始数据x=a,y=b *y = *x ^ *y;//此时x=a不变, y=a^b *x = *x ^ *y;//此时x=a^a^b=b, y=a^b不变 *y = *x ^ *y;//此时x=b不变, y=b^a^b=a }

    其中^表示按位bool运算: “EXCLUSIVE-OR异或”,具有性质:

    a^a=00^a=a(a^b)^c=a^(b^c)

    思考: 1.如果输入是两个同样的数,可以正常交换吗? 答:可以,没有问题 2.如果输入的是两个同样的地址呢? 答:不可以,这样会被置0,因为a^a=0,而且x与y始终同值

    其他应用: 比如一道算法题:找出唯一 一个 只出现奇数次的数。可以用异或的位运算解决

    参考资料:深入理解计算机系统 第3版

    最新回复(0)