经典算法之异或运算(无进位相加)

news2024/9/22 19:35:48

目录

  • 异或运算的定义
  • 异或运算的性质
  • 异或运算的应用
    • 交换两数
    • 翻转指定位
    • 寻找单身狗

在这里插入图片描述

异或运算的定义

众所周知,计算机中的所有数据都是以二进制(0或者1)的形式存储。而异或运算符(^)就是将参加运算的两个数据,按二进制位进行"异或"运算。那么异或运算是如何进行的呢?
异或运算:将参与运算的两个数转化为2进制后相同位置相同则为0相异则为1,但是需要注意,参加运算的两个操作数必须为整数,不能为浮点数。
下面我们用一个实际的小栗子来解释,异或运算在计算机中具体是如何实现的的。

例如:计算3^5的结果

我们先将3和5都转为二进制的形式:
3:0000 0000 0000 0000 0000 0000 0000 0011
5:0000 0000 0000 0000 0000 0000 0000 0101
按照异或运算的运算规律:相同位置相同则为0相异则为1

3^5: 0000 0000 0000 0000 0000 0000 0000 0110

而这个结果转化为十进制就是:6
下面我们用程序来验证一下:

#include<stdio.h>
int main()
{
    int a = 3;
    int b = 5;
    printf("a^b的结果为:%d\n", a ^ b);
    return 0;
}

运行结果:

在这里插入图片描述

异或运算的性质

异或运算符是一个二元的位运算符,也就是说有左右两个操作数,表示为a^b。
因为二进制的每一位只有0和1两个数,所以我们不妨列个表格。

aba^b
000
011
101
110

不难发现,两个操作数,相同为0 不同为1。我们也可也这样理解:异或运算就是无进位相加。什么意思呢?用我们熟悉十进制的角度来看,比如我需要计算5+5,如果正常情况下,我们的计算结果应该是10,10拆开来看,10的个位数是0,十位数是1,可以理解为是两个个位数为5相加后进一的结果。如果不进位那就应该是00。当然十进制中并没有这种运算。
由于二进制每一位的数只有0或1,如果不进位,那么就是两个数相同就是0,相异就是1。
由此,我们得到了如下的性质:

1.两个相同的十进制数异或的结果一定为零。
2.任何一个数和 0 的异或结果一定是它本身。
3.异或运算满足结合律:a ^ b ^ c = ( a ^ b )^ c = a ^ ( b ^ c ) 。
4.异或运算满足交换律:a ^ b= b ^ a 。

异或运算的应用

交换两数

题目:不用任何变量交换两个数
代码如下:

#include<stdio.h>
int main()
{
	int a = 5;
	int b = 6;
	printf("交换前:");
	printf("%d  %d\n", a,b);
	a = a ^ b;
	b = a ^ b;
	a = a ^ b;
	printf("交换后:");
	printf("%d  %d\n", a,b);
	return 0;
}

解释:
第一次异或运算:a = a^b
第二次异或运算:注意此时a已经变成了a ^ b,所以此时b=a ^ b ^ b
根据异或运算的性质:两个相同的数异或一定会被消掉,这里两个b异或就被消掉了,此时b=a
第三次异或运算:此时b=a而a=a ^ b,所以此时a^b应该为:a ^ b^a,同样根据性质,消掉了两个a,所以此时a = b 完成了交换。

翻转指定位

例如:将数 X=1010 1001 的低4位进行翻转,并打印反转后的十进制数
代码如下:

#include<stdio.h>
int main()
{
	int a = 0b10101001;
	int b = 0b00001111;
	int c = a ^ b;
	printf("a:%d\n", a);
	printf("b:%d\n", b);
	printf("a^b:%d\n", c);
	return 0;
}

打印结果:

在这里插入图片描述

166的二进制是:1010 0110
169的二进制是:1010 1001
很容易就可以看出,第四位全部被翻转了。
解释:
根据异或运算的性质可以得出,任何一个数与0异或运算都是它本身,所以对于不想翻转的位置全部写0,而对于想翻转的位置,写1就行了。

寻找单身狗

在这里插入图片描述

int singleNumber(int* nums, int numsSize)
{
    int eor = 0;
    for(int i = 0;i<numsSize;i++)
    {
        eor=eor^nums[i];
    }
    return eor;
}

解释:
异或运算就和 消消乐 一样。
两个相同的数异或一定为0,而其它数异或0的结果都是本身。
当我们的有很多数在一起异或的时候,出现偶数次的数一定会被消掉 ,最后留下的一定是出现奇数次的数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/98887.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言—数据类型

通过sizeof运算符获取数据类型的大小&#xff0c;int占4个字节&#xff0c;表示一个int变量可以存储32位的数据&#xff1b; vs2022中&#xff0c;sizeof运算符返回的结果是一个64位 (8bytes)的无符号整型的值&#xff0c;所以占位符要使用%lld&#xff1b; #include <std…

【空气起动系统控制】使用PID调节起动机入口压力值

前段时间师傅让做一个空起系统的建模&#xff0c;结果给忘了&#xff0c;现在趁着这几天疫情封控期间在家搞一搞&#xff0c;断断续续搞了五天&#xff0c;空起系统控制的相关资料太少了&#xff0c;还好最后弄出来了&#xff0c;虽然最后还存在点小问题&#xff0c;不过大体上…

【Java编程】SSH:Struts、Spring、Hibernate

SSH&#xff1a;Struts、Spring、HibernateSSH 框架指的是 Struts、Spring 和 Hibernate 三者的集成。集成 SSH 框架的系统从职责上分为表示层、业务逻辑层、数据持久层和域模块层。Struts 属于 MVC 框架的一种&#xff0c;提供了对 MVC 系统底层的支持&#xff0c;负责 MVC 的…

汽车ECU通信相关验证项有哪些?

已剪辑自: https://mp.weixin.qq.com/s/-fIAXkS37r6jvnuA7yIQDA 汽车电子的高速发展决定了基础软件所面临的要求将会更加严格&#xff0c;其要求会覆盖软件的安全性、稳定性、可扩展性等方方面面。为了提高软件质量&#xff0c;降低软件应用风险&#xff0c;构建高安全、高可靠…

什么是网站安全?如何查询网站在百度是否安全?

什么是网站安全&#xff1f; 百度词条的定义为网站安全是指出于防止网站受到黑客入侵者对其网站进行挂马&#xff0c;篡改网站源代码&#xff0c;被窃取数据等行为而做出一系列的安全防御工作&#xff0c;在我的理解中&#xff0c;网站安全就是当有人攻击你的网站时&#x…

Java+SSM社团管理系统(含源码+论文+答辩PPT等)

项目功能简介: 该项目采用的技术实现如下 后台框架&#xff1a;Spring、SpringMVC、MyBatis UI界面&#xff1a;JSP、jQuery 、H-ui 数据库&#xff1a;MySQL 系统功能 本社团管理系统是根据大学社团管理的实际应用而开发的&#xff0c;采用JSP技术&#xff0c;Java编程语言&am…

python调用halcon程序/.hdev文件/直接调用halcon引擎

一、前言 python有两种调用halcon的方法 1、安装halcon的python库&#xff0c;pip install mvtec-halcon20111 然后python代码中主要调用方式为&#xff1a;通过ha来调用halcon中的各种算子&#xff0c;本人不是很喜欢这种方式&#xff0c;后面主要介绍第2种方法。 import …

java计算机毕业设计springboot+vue校园出入管理系统

项目介绍 本论文主要论述了如何使用JAVA语言开发一个校园出入管理系统 ,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述校园出入管理系统的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,对系…

可能你看到的大部分教材里讲的指针和指针变量是一个概念,但是真的是这样吗?看完我这篇文章肯定会颠覆你的认知哦?

指针vs指针变量一、指针和指针变量的含义1、变量的“左值”和“右值”2、什么是指针&#xff1f;3、什么是指针变量&#xff1f;二、如何看待“指针就是指针变量”这种说法三、为什么要存在指针&#xff1f;四、对指针进行解引用操作的本质一、指针和指针变量的含义 1、变量的…

2022云南省职业院校技能大赛(高职组) Web技术(网站设计与开发)赛项规程

2022云南省职业院校技能大赛&#xff08;高职组&#xff09; Web技术&#xff08;网站设计与开发&#xff09;赛项规程 一、赛项名称 赛项名称&#xff1a;Web技术&#xff08;网站设计与开发&#xff09; 赛项组别&#xff1a;高职组 二、竞赛内容 Web技术&#xff08;网站设计…

SA-UNet:用于视网膜血管分割的空间注意力UNet

摘要 在本文中提出了一种名为空间注意力UNet&#xff08;SA-UNet&#xff09;的轻量级网络&#xff0c;它不需要大量的带注释的训练样本&#xff0c;可以以数据增强的方式来更有效的使用可用的带注释的样本。SA-UNet引入一种空间注意模块&#xff0c;这个模块沿着空间维度推断…

[激光原理与应用-61]:激光器 - 种子源 - 1064nm皮秒种子源参数解读

目录 第1章 种子源介绍 1.1 简介 1.2 种子源特点 1.3 皮秒种子源应用 第2章 《瀚盈激光》种子源性能指标解读 2.1 波长&#xff1a;1064nm 》红外 2.2 光谱宽度&#xff08;频率宽度、带宽&#xff09; 2.3 线宽 2.4 脉冲宽度 2.5 重复频率 周期T 2.6 输出功率 2.…

【世界杯黑技术专题】「原理探索专题」一文解读一下“卡塔尔世界杯”的先进技术之半自动越位技术SAOT+比赛用球Al Rihla

2022年卡塔尔世界杯即将谢幕 纵观2022年的卡塔尔世界杯的赛程&#xff0c;还是很多波澜的&#xff0c;很多强队都被草草的淘汰掉&#xff0c;特别是我之前较为看好的德国队、西班牙、葡萄牙等队伍草草的出局。让我的心不禁的一紧&#xff0c;到底花落谁家呢&#xff1f;我后面…

渲染组的使用

渲染组件目录概述需求&#xff1a;设计思路实现思路分析参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for change,challenge Survive. happy for har…

Python OS库详解(一)——OS库简介与路径操作

今天继续给大家介绍Python相关知识&#xff0c;本文主要内容是Python OS库详解&#xff08;一&#xff09;——OS库简介与路径操作。 一、Python OS库简介 Python os库是Python的标准库&#xff0c;提供通用的Python程序和操作系统交互的功能函数。os库包含几百个Python函数&…

《数据结构、算法与应用C++语言描述》线性表-链表描述

_11 《数据结构、算法与应用C语言描述》线性表-链表描述 11表示第11篇博文&#xff0c;6表示在 数据结构算法与应用C语言描述 书中所在章节。 本文包含了《数据结构、算法与应用C语言描述》第六章主要练习题答案&#xff0c;给出了线性表链表描述完整测试代码。 6.1 线性表数…

【C语言】编译链接 _Linux下操作 _#define详解 [进阶篇 _复习总结]

1.翻译环境和执行环境 1.1翻译环境 翻译环境又可以分为编译和链接&#xff0c;形成的可执行程序test.exe通过执行环境显示运行结果。 把源代码转换为可执行的机器指令(二进制指令)&#xff0c;由编译器完成。 每个源文件经过编译器生成目标文件(windows下命名为xxx.obj&…

【C++初阶】string类各部分的使用介绍

文章目录1.为什么学string类&#xff1f;2. 标准库中的string类string类的介绍string类常用的接口说明a.常见的构造b.string类对象的常用容量操作c.string类对象的访问及遍历操作d.string类对象的修改操作1.为什么学string类&#xff1f; C语言中&#xff0c;字符串是以’\0’…

计算机毕设Python+Vue休闲网络宾馆管理(程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【图像分割】基于matlab Kmean聚类分水岭、oust、粒子群算法优化脂肪肝图像分割【含Matlab源码 2277期】

⛄一、粒子群算法自适应多阈值图像分割简介 FCM聚类算法是一种局部搜索算法,对初始值较为敏感,容易陷入局部极小值而不能得到全局最优解。PSO算法是一种基于群体的具有全局寻优能力的优化方法。本文将FCM聚类算法和PSO算法结合起来,将FCM聚类算法的聚类准则函数作为PSO算法中的…