首页 > 其他分享 >位运算-异或(^)

位运算-异或(^)

时间:2024-03-28 13:33:05浏览次数:31  
标签:... 运算 int 整数 重复 异或

1 基本概念

1.1 符号

异或是一种二进制的位运算,符号以 XOR 或 ^ 表示。

1.2 运算规则

相同为0,不同为1,即(可以看做二进制下的不进位加法)

1 ^ 1 = 0

0 ^ 0 = 0

1 ^ 0 = 1

1.3 运算性质

  • 交换律: A ^ B = B ^ A

  • 结合律: ( A ^ B ) ^ C = A ^ ( B ^ C )

  • 自反性: A ^ B ^ B = A (由结合律可推: A ^ B ^ B = A ^ ( B ^ B ) = A ^ 0 = A)

  • x ^ x = 0 , x ^ 0 = x

  • x ^ -1 = ~x

2 运用

2.1 变量交换

// 常规方法
int tmp = a;  // temp = 3
a = b;         // a = 7
b = tmp;      // b = 3
 
// 异或方法
a = a ^ b;  // a = 3 ^ 7
b = a ^ b;  // b = (3 ^ 7) ^ 7 = 3 ^ (7 ^ 7) = 3
a = a ^ b;  // a = (3 ^ 7) ^ (3 ^ 7 ^ 7) = (3 ^ 3) ^ (7 ^ 7) ^ 7 = 7 

2.2 排除偶次重复

示例:在一个整数数组中,仅存在一个不重复的数字,其余数字均出现两次(或偶数次),找出不重复数字。

// 常规方法:通过二次循环找出不重复的数字
for (...) {
    for (...) {
        ...
    }
}
 
// 异或方法:将所有整数异或,出现偶数次的整数会被抵消,最终留下不重复整数。
int ans = 0;
for (int i = 1; i <= n; i++) {
    ans = ans ^ num[i];
}
return ans;

参考文献

标签:...,运算,int,整数,重复,异或
From: https://www.cnblogs.com/wh1sky/p/18101451

相关文章

  • 【C++】自增运算符重载及其效率问题
    自增运算符重载总所周知,C++的自增运算符有两种基本使用方法,在这里我们分别称为i++和++i,想必大家在C语言课上已经学了自增运算符和自减运算符,这里就不再赘述,这里主要讲解自增运算符重载,自减运算符完全可以触类旁通。首先了解什么是运算符重载。定义:运算符重载是面向对象编......
  • 运算符: 优先级()
    运算符:优先级()1.算术运算符publicclassOperator{publicstaticvoidmain(String[]args){//二元运算符//Ctrl+D:复制当前行到下一行inta=10;intb=20;intc=25;intd=25;System.out.pr......
  • C++ 运算符全解析:从基础概念到实际应用
    C++运算符运算符用于对变量和值执行操作。在下面的示例中,我们使用+运算符将两个值相加:intx=100+50;虽然+运算符经常用于将两个值相加,就像上面的示例一样,但它也可以用于将变量和一个值相加,或者将一个变量和另一个变量相加:intsum1=100+50;//150(100......
  • (less) calc运算为什么不生效? 变量如何使用?
    less样式预处理器calc运算为什么不生效?变量如何使用?======答案如下见代码:<template><divclass="outer"><divclass="top"></div><divclass="box">helloworld</div><divclass="con"><......
  • react零基础到精通-1|基础概念,主要特性,s6语法,react相关的开发环境和工具,react简介,箭头
    致力于解决复杂视图层开发我呢提,全新的ui组件的开发理念,1.1React简介前端UI的本质问题是如何将来源于服务器端的动态数据和用户的交互行为高效地反映到复杂的用户界面上。React另辟蹊径,通过引入虚拟DOM、状态、单向数据流等设计理念,形成以组件为核心,用组件搭建UI的开发......
  • python 数据类型和运算符 进阶学习
    有了前面的基础的,我们对数据类型有了一定的了解,按照思维进阶深度学习的学习方法,我们对前面的实例进行扩展学习,以求学习到更多一点的知识。实例二:输入两个数,计算它们的和、平方、三次方、平方根、三次方根  首先是复习前面的数据类型的知识该程序的执行结果  是......
  • C++复制构造函数、=运算符重载
    C++复制构造函数、=运算符重载#include<iostream>usingnamespacestd;classbase{private:intx,y;public:base():x(2),y(4){cout<<"basedefaultconstructor"<<endl;}base(intx,inty):x(x),y(y){cout<<"base......
  • 异或绕过及其原理
    异或的原理总的来说,异或就是两个字符的二进制进行异或比如:a=01010101;//假设其为二进制b=10101010;c=a^b;//进行异或c=11111111;总的来说就是两个字符二进制一个为0,另一个为1时,异或结果为1只要不同就为1,相同就为0。为什么上面的异或和在CTF题中看到的不一样......
  • 小白学视觉 | 图像上的 OpenCV 算术运算
    本文来源公众号“小白学视觉”,仅用于学术分享,侵权删,干货满满。原文链接:图像上的OpenCV算术运算1OpenCV简介图像可以进行算术运算,例如加法、减法和按位运算(AND、OR、NOT、XOR)。这些操作可以帮助改善输入图像的属性。图像算法对于分析输入图像的属性是必要的,可以将操作后......
  • 3/23作业上的一些简单题可以看看提升基础,不同简单,这里我写的更需要好好苍梧苍梧,三元条
    这两天晚上都得上课,所以都没写,现在来补一点,简单的被我写复杂了,下面我会提到:这一句是最后一题用的,神之点法if(a/1000==(a%10)*10+(a%100)/10)第一题从键盘输入任意两个正整数m,n,判断m能否被n整除,若能输出m与n的值,否则继续判断两个数的奇偶性,若为奇数输出“Odd”,若为偶数......