异或操作符

一.运算法则

异或运算法则为:
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

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值