当前位置: 首页 > news >正文

数据结构----异或

数据结构----异或

一.何处用到了异或

1. ==运算符

==  //判断是否相同 用到了异或,看异或结果如果是0就是相同,不是0就是不同//注意:==   不能给小数用,小数没有相等的概念,所以小数判断是否相同都是进行相减判断

2.找一堆数中只出现一次(奇数次)的数字

前提:最多有两个只出现一次(奇数次)的数字

3.内存清零

自己异或自己

4.交换

不用第三个变量进行交换的方法

//加减法
int a;
int b;a=a+b;
b=a-b;
a=a-b;
//异或
int a;
int b;if(a^b){//先判断是否相同,相等的话就不换了
a=a^b;
b=a^b;
a=a^b;
}

二.不用“+ - * /”实现加法

方法:

​ 1.两个数先异或 (得到的是不进位的数)

​ 2.两个数再相与 (得到的是进位的数右移一位的数,所以下一步要进行左移)

​ 3.相与得到的数据再进行一次左移 (得到的是进位的数)

​ 4.将第一步和第三步获得的数从第一步继续进行操作,直到第3步获得的数为0时结束(进位为0时)

代码如下

int Add(int a, int b) {int And=0;int Xor=0;while (1) {And = a & b;Xor = a ^ b;//不进位if (!And) {return Xor;}//进位And = And << 1;a = And;b = Xor;}
}

三.格雷码(异或的应用)

//二进制
0 0 0 0
0 0 0 1 
0 0 1 0 
0 0 1 1 
0 1 0 0 
0 1 0 1 
0 1 1 1     
1 0 0 0
//二进制格雷码
0 0 0 0
0 0 0 1 
0 0 1 1 
0 0 1 0 
0 1 1 0 
0 1 1 1 
0 1 0 1     
0 1 0 0
1 1 0 0

如何从二进制转换到二进制格雷码(异或)

二进制高位(第一位)保留 获得二进制格雷码高位(第一位)

二进制第二位与二进制第一位异或 获得二进制格雷码的第二位

二进制第三位与二进制第二位异或 获得二进制格雷码的第三位

以此类推可得

如 0 0 1 0 变为 0 0 1 1

如何从二进制格雷码转换到二进制(异或)

二进制格雷码高位(第一位)保留 获得二进制高位(第一位)

二进制格雷码第二位与二进制第一位异或 获得二进制的第二位

二进制格雷码第三位与二进制第二位异或 获得二进制的第三位

以此类推可得

如 0 0 1 0 变为 0 0 1 1

看一道与格雷码知识有关的题

力扣第1611题

题目: 给你一个整数 n,你需要重复执行多次下述操作将其转换为 0

  • 翻转 n 的二进制表示中最右侧位(第 0 位)。
  • 如果第 (i-1) 位为 1 且从第 (i-2) 位到第 0 位都为 0,则翻转 n 的二进制表示中的第 i 位。

返回将 n 转换为 0 的最小操作次数

这里的两种操作方法是格雷码的两种翻转方式

 0  二进制 0 0 0 0 对应二进制格雷码  0 0 0 01  二进制 0 0 0 1 对应二进制格雷码  0 0 0 12  二进制 0 0 1 0 对应二进制格雷码  0 0 1 1 //0到1
二进制格雷码发生的就是第一次翻转方法
//1到2
二进制格雷码发生的就是第二次翻转方法  //二进制格雷码这种翻转方式是交替进行的(如上面0到1,1到2)

解题方法:1.将这个数看成是格雷码

​ 2.将这个格雷码转换成二进制

​ 3.根据二进制的数值写出最少操作次数

http://www.lryc.cn/news/110242.html

相关文章:

  • PHP Smarty模板的语法规则是怎样的?
  • Socks IP轮换:为什么是数据挖掘和Web爬取的最佳选择?
  • 优化|当机器学习上运筹学:PyEPO与端对端预测后优化
  • Cocos Creator的 Cannot read property ‘applyForce‘ of undefined报错
  • 纯css实现九宫格图片
  • 【MySQL】数据库的增删查改+备份与恢复
  • Docker 部署 redis 举例
  • 通过HandlerMethodArgumentResolver实现统一添加接口入参参数
  • JAVA-spring boot 2.4.X报错Unable to find GatewayFilterFactory with name Hystrix
  • 运输层---UDP协议
  • 【LeetCode】剑指 Offer Ⅱ 第3章:字符串(7道题) -- Java Version
  • 【python】绘图代码模板
  • RTT学习笔记12-KConfig 语法学习
  • 基于Mediapipe的姿势识别并同步到Unity人体模型中
  • Linux下进程的特点与环境变量
  • 以Llama-2为例,在生成模型中使用自定义LogitsProcessor
  • python 计算图片hash 缓存图片为key
  • 制造型企业如何实现车间设备生产数据的实时采集?需要5G网络吗?
  • 第2章 HTML中的JavaScript
  • 景联文科技高质量成品数据集上新啦!
  • flask------请求拓展
  • 大数据-玩转数据-FLINK-从kafka消费数据
  • 介绍Sping Boot的5个扩展点
  • Linux2.6内核配置说明
  • Pytest简介及jenkins集成
  • 【LeetCode】105. 从前序与中序遍历序列构造二叉树 106. 从中序与后序遍历序列构造二叉树
  • 堆内存和一些检测工具
  • 【JavaScript】元素获取指南
  • uniapp 返回上一页并刷新
  • Java阶段五Day21