左神算法笔记(异或)+C语言实现

2023-05-16

异或

  • 性质
  • 运算性质
  • 应用举例
    • 1、不用额外变量,交换两个数的值
      • 原理
      • 代码
    • 2、找到数组中唯一一个出现奇数次的数字
    • 3、提取最右侧的1(常用)
      • 应用1:找到数组中唯二出现的两个出现奇数次的数字
      • 代码
      • 应用2:找到二进制有多少1
      • 代码

性质

1、相同为0,不同为1
记为不进位相加

运算性质

2、异或运算的性质:A^0=A A^A=0
满足交换律、结合律(多个^顺序不影响答案)

应用举例

1、不用额外变量,交换两个数的值

a=a^b
b=a^b
a=a^b

原理

	int a=甲,int b=乙
    a = 甲^乙
    b = 甲^乙^乙
    a = 甲^乙^乙^甲^乙
 	(前提:a,b地址不同)

代码

#include <stdio.h>

int change(int a,int b) {
	a = a ^ b;
	b = a ^ b;
	a = a ^ b;
	printf("a=%d\nb=%d",a,b);
	return 0;
}

2、找到数组中唯一一个出现奇数次的数字

全部异或起来即可

3、提取最右侧的1(常用)

A&(~A)+1

应用1:找到数组中唯二出现的两个出现奇数次的数字

先找到数组全部异或起来以后结果最右侧的1出现在哪一位x

根据第x位是1或0将数组分成两组,分别全部异或,即得结果。

代码

#include <stdio.h>
#include <stdlib.h>

int two_oddTimes_numb(int list[], int size) {
	int i, j ,rightone;
	int eor = 0;
	for (i = 0; i < size; i++) {
		eor ^= list[i];
	}
	rightone = eor & (~eor) + 1;
	//用&实现分组^
	int ans = 0;
	for (j = 0; j < size;j++) {
		if ((list[j] & rightone) != 0) {
			ans ^= list[j];
			printf("%d\n",list[j]);
		}
	}
	char string1[33],string2[33],string3[33];
	_itoa_s(eor, string1, 33, 2);
	_itoa_s(ans, string2, 33, 2);
	_itoa_s(ans^eor, string3, 33, 2);
	printf("库函数得到的二进制为:%s\r\n", string1);
	printf("库函数得到的二进制为:%s\r\n", string2);
	printf("库函数得到的二进制为:%s\r\n", string3);
	printf("两个出现奇数次的数为:%d和%d\n",ans,ans^eor);
	return 0;
}

刚学C,一开始没有初始化eor,以为是默认的0,结果编译可以通过,编译器也没给我提示必须必须初始化。就是结果不对,懵了很久。
结果原因就是C没有默认是0的说法,只声明一个变量只会给他一块地址,里面还有之前系统放的垃圾数据(操作系统回收内存空间时,并不清空该内存空间中遗留下来的数据
编译器如果发现一个变量里面存放的是一个垃圾值,就认为没有给它赋初值,那么系统就会自动将一个很小的,如 –858993460 这个填充数字给放进去。所以我们看到的结果都是一个不变的值。
还有就是直接printf未初始化的数据会报错,使用这个未初始化的数进行一番操作以后再printf又不会报错了。
我用的visual studio 2022版的,转二进制的时候报itoa()不能用了,要用_itoa_s(int 要转换的数字,char 存放转换结果的字符串,size_t 存放结果的字符数组长度,int 转化的进制数,2表示2进制,10表示10进制),比原来多了一个字段,size_t 类型表示C中任何对象所能达到的最大长度,它是无符号整数。

应用2:找到二进制有多少1

只要还不是1,就一直和自己提取的右边第一个1^,同时计数。

代码

#include <stdio.h>
#include <stdlib.h>

int find_1Times(int a) {
	char str[33];
	_itoa_s(a, str, 33, 2);
	printf("二进制为:%s\n", str);

	int times = 0,tmp =0;
	while (a != 0) {
		//去掉最后一个1
		tmp = a & ((~a) + 1);
		times++;
		a ^= tmp;
	}
	printf("有%d个1\n", times);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

左神算法笔记(异或)+C语言实现 的相关文章

  • MacBook不断重启的 5 个原因以及如何解决此问题

    您的 Mac 是否突然无故重启 xff1f 您外出回来时 xff0c 突然发现您的 Mac 正在神秘地关闭并重新启动 xff0c 这非常令人生气 如果重新启动问题变得更加严重 xff0c 您的 MacBook可能根本无法使用 小编将为您带来
  • 如何使用Super Vectorizer在Mac上快速矢量化图像?

    如何在 Mac 上将 PDF 转换为SVG矢量 xff1f 有需要的朋友快来跟小编看看具体做法吧 xff01 步骤 1 xff1a 在 Mac 上打开 Super Image Vectorizer 将图像文件导入 Super Vectori
  • Mac电脑怎么使用ping命令?

    电脑出问题了 xff0c 上不了网 xff0c 想排查下电脑的问题出在哪儿就需要用到ping xff0c 但是如果是Mac电脑该如何ping呢 xff1f 其实在Mac 自带的 终端 中使用ping命令 xff0c 下面小编教你如何在Mac
  • 安装VMware Workstation Pro 16 教程,Ubuntu 18 桌面版安装教程

    目录 1 VMware Workstation 16 Pro 安装教程 2 Ubuntu 18 桌面版安装教程 1 VMware Workstation 16 Pro 安装教程 1 第一步 xff1a 到官网进行下载软件 xff0c 下载
  • STM32 创建LED工程,点亮LED

    容忍5V电压 FT 61 FIve Tolerate 允许5V 寄存器就是特殊的存储器 上拉输入和下拉输入 如果输入啥都不接 xff0c IO口输入电平极容易受外部电平干扰 xff0c 加上拉电阻就是为了保护输入引脚的电平 为了避免引脚悬空
  • C语言枚举使用技巧

    什么是C语言枚举 C语言枚举是一种用户自定义数据类型 xff0c 它允许程序员定义一个变量 xff0c 并将其限制为一组预定义的常量 这些常量被称为 枚举值 xff0c 并且可以通过名称进行引用 在C语言中 xff0c 枚举值是整数类型 x
  • 关于win10系统打开VMware虚拟机蓝屏的解决方案

    先说结论 xff1a 不要急着更改系统配置甚至重装系统 xff0c 首先检查自己的VMware版本 xff0c 如果为16 1或以前 xff0c 请将原先的版本升级为VMware17 0版本 xff01 xff01 xff01 本人当前电脑
  • 洛谷P1025

    这道题类似于把n个苹果放到k个盘子里且不能空盘子的问题 递归 xff08 dfs xff09 做法 include lt bits stdc 43 43 h gt define LL long long using namespace st
  • windows权限维持之shift后门

    原理 xff1a 沾滞键的目的是为了帮助那些按键有困难的人设计的 xff0c 在Windows系统下连续按5次shift键后 xff0c 系统就会执行C Windows System32下的sethc exe xff0c 也就是启用了沾滞键
  • PostgreSQL数据库smallint、bigint转到Oracle,要用什么类型替代? 是number么,那长度分别是多少?...

    个人意见 xff0c 仅供参考 xff1a smallint是有符号或无符号2字节的整数 xff0c 范围是0 xff5e 65 536 xff0c 5位整数 bigint是有符号或无符号8字节的整数 xff0c 范围是0 xff5e 18
  • 网络安全计算机基础

    计算机网络概念 xff1a 实际上是将分布在不同地理位置 xff0c 且具有独立功能的计算机 通过通信链路以及通信设备 xff0c 在网络操作系统 xff0c 网络管理软件及网络通信协议的管理和协调下实现信息传输与资源共享形成的计算机系统
  • ImportError:No module named ‘PIL‘

    运行时报错 xff1a ImportError No module named 39 PIL 原因是缺失一个pillow的数据包 xff0c 不能直接 pip install PIL xff0c 会提示找不到这个安装包 xff0c 需使用如
  • c++中#与##的作用

    1 c 43 43 中 用于把转换成字符串 define T A A 没有使用 using namespace std int main cout lt lt 34 T 2 34 lt lt T 2 lt lt endl cout lt l
  • 人工智能实验——八数码难题

    人工智能实验 八数码难题 人工智能实验 八数码难题 人工智能实验 八数码难题八数码难题简介八数码难题所用到的算法简介代码实现解释运行结果显示代码附件程序可视化 八数码难题简介 八数码问题指的是定义一个3 times 3的格子 xff0c 然
  • idea报错unable to reload maven project

    文章目录 前言一 问题状况二 解决步骤三 卸载maven仓库四 重新安装依赖总结 前言 今天从公司的svn中检出了一个老项目 xff0c 是jQuery 43 spring打造的项目 xff0c emmmm用eclipse编写 xff0c
  • VNC树莓派无法连接

    问题 xff1a 树莓派配置好VNC后 xff0c 第二次通过笔记本远程连接失败 xff0c 报错refused by the computer 解决方法 xff1a 在putty中输入IP地址登录树莓派 xff0c 输入vncserver
  • 经典LCA例题:P4180 [BJWC2010] 严格次小生成树

    Acwing xff1a 严格次小生成树 xff08 求两点间路径上最大边的权值 xff09 模板 洛谷 xff1a 严格次小生成树 求两点间路径上最大边的权值 xff0c 就不能通过前缀和了 xff0c 会丢失信息 每个结点存到其他结点的
  • linux下的压缩与解压缩

    由于计算机中的数据有些需要备份从而归档一个大文件中 下面介绍一下常用的linux压缩解压缩命令 1 关于tar的命令 参数解析 xff1a c 创建生成打包的文件 v 列出打包和解包的详细过程 xff0c 显示进度 f 指定文档的名称 xf
  • 关于fixed frame【odom】does not exist的问题

    在执行完roslaunch mbot description arbotix mbot with camera xacro launch后 xff0c 终端末端是否出现以下一段红色字体 xff0c 若有 xff0c 则此篇文章对你或许有用
  • Linux安装配置Tomcat

    1 下载Tomcat服务器 链接 xff1a https pan baidu com s 15wEXVJWdUUuXX1xRnXylUQ 提取码 xff1a 1234 官网下载 xff1a Apache Tomcat Apache Tomc

随机推荐

  • Oracle类型number与PG类型numeric对比和转换策略

    Oracle 11g number 任意精度数字类型 http docs oracle com cd B28359 01 server 111 b28318 datatype htm CNCPT313 存储数据的范围 正数 xff1a 1
  • 强制关闭linux进程

    问题 xff1a 卡住 xff0c 鼠标可以移动但点击无反应 xff0c 键盘可用 方法 xff1a xff08 1 xff09 Ctrl 43 Alt 43 T 打开终端 xff0c 输入top xff0c 显示的全是现在系统的进程 xf
  • 【计算机系统遇到的问题】win11权限开启方法——相机、麦克风等权限——“其中一些设置由你组织管理”

    win11更新后 xff0c 想必大家应该会出现跟我一样的问题 无法开启权限 xff0c 不知道在哪开启权限 我是在下午跟我老爸视频电话的时候发现这个问题的 xff0c 点击开摄像头 xff0c 但是我这边跟老爸那边却没有我的画面 xff0
  • gitlab安装部署

    本教程使用centos7 6 首先安装依赖包 yum install y curl policycoreutils python openssh server 如下提示相关依赖安装完成 安装步骤如下 xff1a 1 使用官方脚本添加yum源
  • 用51单片机中断控制LED灯亮灭

    用51单片机中断控制LED灯亮灭 span class token macro property span class token directive keyword include span span class token string
  • HDFS

    xff08 一 xff09 HDFS简介及其基本概念 HDFS xff08 Hadoop Distributed File System xff09 是hadoop生态系统的一个重要组成部分 xff0c 是hadoop中的的存储组件 xff
  • 如何在服务器用docker搭建Redis集群

    用docker部署Redis集群 这里用的是分片 43 高可用 43 负载均衡 xff0c 三主三从 第一步创建网卡 span class token comment 创建网卡 span span class token function
  • P1825 [USACO11OPEN]Corn Maze S——bfs

    USACO11OPEN Corn Maze S 题面翻译 奶牛们去一个 N M N times M N M 玉米迷宫 xff0c 2
  • 7-57 租用游艇问题——dp

    长江游艇俱乐部在长江上设置了n个游艇出租站1 xff0c 2 xff0c xff0c n 游客可在这些游艇出租站租用游艇 xff0c 并在下游的任何一个游艇出租站归还游艇 游艇出租站i到游艇出租站j之间的租金为r i j 1 lt 61 i
  • 三种接口实现增删改查

    目录 ArrayListHashSetHashMap ArrayList ArrayList 实现增删改查 span class token keyword package span span class token namespace t
  • 旗帜软件工作室2021年年度交接会议总结

    只有时间的消逝 xff0c 才使我们注意到时间 在小组的一年时间过的飞快 xff0c 在这一年里我们的心智品性和专业能力都经历了充分了磨练 和一年前的我们相比 xff0c 如今的我们更加成熟稳重 xff0c 不再心浮气躁 xff1b 在自己
  • nested exception is org.springframework.beans.factory.BeanCreationException: 不能注入对象 创建对象失败 spring...

    出现错误的背景 在使用Spring 43 SpringMVC 43 Mybatis SSM集成框架时 xff0c 服务器启动就会报错 错误根源 XML配置错误 解决方案 第一步 查找springmvc xml 配置文件中 是否添加了扫描注解
  • 算法练习——(2)逢7过

    1 中国朋友们聚会时喜欢玩 34 逢7过 34 的游戏 xff0c 老外有个同样的游戏 xff0c FlipFlop xff0c 它从1计数到100 xff0c 顺序输出 当遇到3的倍数就要说 Flip xff0c 遇到5的倍数就要说 Fl
  • beego的安装和简单使用

    beego的安装和使用 beego安装升级 beebee工具的安装 使用beebee newbee apibee runbee packbee version beego beego 是免费 开源的软件 xff0c beego 源代码目前托
  • 网络爬虫——GO

    这里写目录标题 go colly网络爬虫框架goquery HTML解析goquery主要的结构怎么使用goquery常用选择器 go colly网络爬虫框架 go colly是用Go实现的网络爬虫框架 go colly快速优雅 xff0c
  • LeetCode每日一题(12)——按奇偶排序数组(双指针)

    按奇偶排序数组 1 题目2 示例3 思路4 代码 1 题目 给你一个整数数组 nums xff0c 将 nums 中的的所有偶数元素移动到数组的前面 xff0c 后跟所有奇数元素 返回满足此条件的 任一数组 作为答案 2 示例 示例 1 x
  • LeetCode每日一题(25)——最少移动次数使数组元素相等 II

    最少移动次数使数组元素相等 II 1 题目2 示例3 思路4 代码 1 题目 给定整数数组 nums 和整数 k xff0c 请返回数组中第 k 个最大的元素 请注意 xff0c 你需要找的是数组排序后的第 k 个最大的元素 xff0c 而
  • LeetCode每日一题(26)——高度检查器

    高度检查器 1 题目2 示例3 思路4 代码 1 题目 学校打算为全体学生拍一张年度纪念照 根据要求 xff0c 学生需要按照 非递减 的高度顺序排成一行 排序后的高度情况用整数数组 expected 表示 xff0c 其中 expecte
  • 乱码的原因和发展(关于编码)

    乱码的原因和发展 xff08 关于编码 xff09 正文1 引言2 什么是编码3 ASCII 美国人先搞出了 美国信息交换标准代码 4 GB 2312 我国 1980 年公布的 GB 2312 80 信息交换用汉字编码字符集 基本集 5 G
  • 左神算法笔记(异或)+C语言实现

    异或 性质运算性质应用举例1 不用额外变量 xff0c 交换两个数的值原理代码 2 找到数组中唯一一个出现奇数次的数字3 提取最右侧的1 xff08 常用 xff09 应用1 xff1a 找到数组中唯二出现的两个出现奇数次的数字代码应用2