码迷,mamicode.com
首页 > 其他好文 > 详细

XOR 的原理与应用

时间:2020-03-06 17:29:16      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:pre   amp   相同   number   for   取反   不同   ++i   结果   

理论

逻辑异或 - 维基百科

对于命题 \(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 的原理与应用

标签:pre   amp   相同   number   for   取反   不同   ++i   结果   

原文地址:https://www.cnblogs.com/yexuesong/p/12427425.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!