XOR 的原理与应用

Posted yexuesong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XOR 的原理与应用相关的知识,希望对你有一定的参考价值。

理论

逻辑异或 - 维基百科

对于命题 (p, q)(p) 异或 (q) 通常记作 (p XOR q)(p oplus q)。在编程语言中,常写作 p ^ q

技术图片技术图片

技术图片

阿贝尔群/交换群 - 维基百科

技术图片

异或是 (mathbb{Z}_{2}) 群的加法运算,满足加法结合律和交换律。

应用

例一,利用其自反关系去交换 a, b 两个元素的值。

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

例如 a 为 101,b 为 011

第一次异或得到的是 110,其中 1 代表不同,0 代表相同

以第一次的结果作为「特征值」进行第二次异或,对 b 的每一位处理,特征为 1 则取反,特征为 0 则不变,即将 b 011 转换为 a 101

再用「特征值」对变成 a 的 b 进行异或,即可得到 b

例二,https://leetcode-cn.com/problems/missing-number/

给定一个包含 (0, 1, 2, cdots, n)(n) 个数的序列,找出 (0 cdots n) 中没有出现在序列中的那个数。

int missingNumber(vector<int> &nums)
{
    int res = nums.size();
    for (int i = 0; i != nums.size(); ++i)
    {
        res ^= nums[i];
        res ^= i;
    }
    return res;
}

以上是关于XOR 的原理与应用的主要内容,如果未能解决你的问题,请参考以下文章

Python 操作Redis

python爬虫入门----- 阿里巴巴供应商爬虫

Python词典设置默认值小技巧

《python学习手册(第4版)》pdf

Django settings.py 的media路径设置

Python中的赋值,浅拷贝和深拷贝的区别