欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

异或操作符

程序员文章站 2022-07-15 12:07:04
...

一.运算法则

异或运算法则为:
a⊕b = (¬a ∧ b) ∨ (a ∧¬b)

即相同为0,不同为1。在计算机语言中,异或的符号为“^”。

举例:0 ^ 0 = 0;   0 ^ 1 = 1; *//可以理解为任何数和0异或,结果为任何数本身。*
      1 ^ 0 =1 ;   1 ^ 1 = 0; *//可以理解为任何数和1异或,结果为任何数取反。*

二.用途

  1. 位反转
    举例:10001000 在一些情况下,第四位和第五位需要反转,可以用10001000与00011000进行异或运算。
    10001000 ^ 00011000 = 10010000

  2. 实现两个值的交换,而不必使用临时变量。
    例如交换两个整数a=10100001,b=00000110的值,可通过下列语句实现:
        a = a^b;   //a=10100111
        b = b^a;   //b=10100001
        a = a^b;   //a=00000110

  3. 统计某一位的奇偶数
    将某个元素中的每一位逐步异或.
    例如a1=1010,则b1=1 ^ 0 ^ 1 ^ 0 = 0,由此可以判断a中为1的位数是奇数还是偶数。
    例如a2=10110,则b2=1 ^ 0 ^ 1 ^ 1 ^ 0 =1,由此可以判断a中为1的位数是奇数还是偶数。

  4. 只出现一次的数字(力扣136)
    给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

    提示:数组中其余元素只出现两次;
    0 ^ n = n;

        int singleNumber(vector<int>& nums) {
               int len = nums.size();
                int result=0;
               for(int i=0;i<len;i++){
                   result ^=nums[i];
               } 
                return result;
         }
    

    这种做法的好处是,不需要额外的存储空间。

三.总结
在特定情况下使用异或操作可以减少临时变量。
第一次写博客,多为摘录,如果有错误的地方,还希望大家斧正。

摘录:https://blog.csdn.net/xiezhongyuan07/article/details/79248516

相关标签: 异或