C语言异或操作符的经典题

手把手教你在全新服务器内网安装OpenEuler 22.03 LTS SP4+ 安装 openGuass 5.0.0(LTS) 数据库 openEuler是面向数字基础设施的操作系统,支持服务器、云计算、边缘计算、嵌入式等应用场景,支持多样性计算,致力于提供安全、稳定、易用的开源服务器Linux操作系统。 阅读详情

今天分享两个C语言异或操作符解决问题的经典例子:
首先讲一下异或的基本运算规则:

1^x = ~x                0^x = x
0^0 = 0                 0^1 = 1
1^0 = 1                 1^1 = 0

所以可以看出1和任何数异或的结果就是x取反,0和任何数的异或结果就是x本身,这是很重要的两个结果。

实例一:
不使用(a+b)/2这种方式,求两个数的平均值。

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

int avg1(int a, int b)
{
	return a + ((b - a) >> 1);
}
int avg2(int a, int b)
{
	return (a&b) + ((a^b) >> 1);
}
int main()
{
	int a, b;
	printf("请输入两个数:\n");
	scanf("%d %d",&a,&b);
	printf("avg1=%d\n",avg1(a,b));
	printf("avg2=%d\n",avg2(a,b));
	system("pause");
	return 0;
}

讲解:首先这里有两个函数是用了两种方法。
方法一:比简单的求和方法,就是a加上a和b之间差值的一半,这样就是两个数的平均值,这个我想大家应该不难想明白,简单地说就是让两个变得一样多,右移一位相当于除2。
方法二:这个方法就难想到一些,因为他是(a&b) + ((a^b) >> 1),首先是先化为二进制进行计算,a&b求得是相同位的平均值。
举例——>
在这里插入图片描述
-> 这里可以看到a和b的第二位和第三位是相同的,所以a&b其实就已经得到了a和b相同位的平均值,而a^b就是得到了不同位的值,然后再除2,两者一加就是两个数的平均值。

实例二:
一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。
请找出这个数字。(使用位运算)

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int get_once(int a[])
{
	int ret = 0;
	for (int i = 0; i < 11; i++)
	{
		ret ^= a[i];
	}
	return ret;
}
int main()
{
	int a[11];
	printf("请输入11个整数:\n");
	for (int i = 0; i < 11; i++)
	{
		scanf("%d",&a[i]);
	}
	printf("%d\n",get_once(a));
	system("pause");
	return 0;
}

讲解:这道题还是很有意思的,首先要求用位运算符解决,所以就得充分利用 “^” 的性质,下面还是举个例子来讲解。
举例——>
在这里插入图片描述

  首先异或的结果和数字的运算顺序无关,其次在连续异或运算中如果两个相同的数的异或
结果绝对为0,相当于抵消的效果,最后的结果只会保留单独出现的那个数字,从左边的二进
制序列也可以看出,一共四列,每列的1如果是奇数个最后的结果绝对会是1,如果是偶数个1
的话那结果绝对是0,多的1就会留下来,单独出现的那个数就会暴露出来,所以最后连续异
或的结果就是单独出现的那个数字。

这是非常巧妙的一个方法,所以异或这个操作符熟练使用的话还是能方便的解决不少的问题,挺神奇的一个操作符!

深入解析BlueZ5与D-Bus:Linux蓝牙开发实战指南 本文深入解析BlueZ5与D-Bus在Linux蓝牙开发中的核心应用,提供从环境搭建到实战开发的完整指南。通过详细代码示例和调试技巧,帮助开发者掌握蓝牙协议栈与D-Bus接口的交互方法,实现高效蓝牙设备管理与GATT服务开发。 阅读详情

相关推荐

VSCode多文件C语言项目编译实战:从配置到运行

本文详细讲解了如何在VSCode中配置多文件C语言项目的编译环境。通过手把手教学,指导读者创建项目结构、编写代码,并重点深度配置task.json与launch.json文件,实现一键编译和调试所有C文件,解决常见的“undefined reference”等链接错误,提升开发效率。

g8f9d0s1a2的博客 1098

C语言异或操作详解(小小异或,大大作用~)

文章目录 *按位异或"^"(1)何为“^”:①“^”的介绍(2)用于算法的经典案例: 1.数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?(源自leetcode面试题 17.04. 消失的数字) 2.一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。(源自leetcode.剑指 Offer 56 - I. 数组中数字出现的次数)①思路:②解题代码

weixin_52265481的博客 4万+

【Codesys】-扫描添加失败,手动添加第三方模块,真·DC模式的高速计数模块

欧姆龙耦合器(NX-ECC201)和高速计数模块(NX-EC0132)单独使用。扫描设备添加到Codesys中,会报错,无法自动添加。记录一下,以防忘记。高速的计数保证了位置的准确性,位置准确就能保证裁切的精度,一切的基础就在这儿了,奈何目前只有欧姆龙和倍福能做到这样的波形。

qq_35316470的博客 1389

【C语言】异或(^)操作符

包含数学逻辑操作符异或(^)的简介,运算法则,逻辑,作用,巧用,与加减运算的关系等内容.

C/C++领域,数据结构,linux,MySQl学习者 1万+

浅谈车联网概述-1

车联网技术目前在车企中应用广泛,车联网通过车载传感器、无线通信等技术,能够将车辆上百的传感器数据上传至云端,当前智能网联车辆可以理解为一个“大号”手机。

Hello, World! 新能源汽车智能网联工程师,分享日常工作思考。 559

Vue3 + 高德地图实现车辆电子围栏监控与报警

通过本文的实现,我们完成了一个通用的车辆电子围栏监控功能:支持多种围栏类型。支持进入/离开/双向报警。使用缓存机制避免重复告警。可与Vue3 + 高德地图无缝集成。在实际项目中,可以结合WebSocket 实时定位,实现车辆的实时监控 + 围栏告警系统🚀。

专注于前端开发与实战技巧,记录从零到一的学习与项目经验。分享 Vue3 / JavaScript / TypeScript / Flutter /Uniapp等前端技术,以及 性能优化、工程化、最佳实践。 1035

【c语言操作符系列1】^(异或操作符)讲解和多种例题详解

详解了c语言中^的原理、特点。重点讲述了关于^操作符的多道经典例题

m0_74044018的博客 2万+

模组 RG500Q入网问题分析

- [ ] 不同于公网,在5G专网环境中, 通常使用很多非标准的网络配置,如PLMN/APN等。因此,5G模组在专网环境下通常要做一些专门的配置才能正常入网,本文分析一例在专网环境, 5G终端无法入网问题的定位过程。 - [ ] 具体涉及到以下模组操作: 恢复出厂、SA only、锁BAND、配置MBN等

十年通信老兵的技术修炼之路——从3G到5G,从地面基站到卫星通信。 935

C语言中运算符“^”,“&”,“|”简介

异或操作是一种基本的位运算符,具有许多特性和应用场景。它可以用于交换两个变量的值、检测出现奇数次的元素、判断两个数是否相等等。在位运算中,异或操作也发挥着重要的作用。希望通过本文对异或操作有了更深入的了解,并能在编程中灵活应用它。按位与操作是一种常用的位运算符,它可以用于清零特定位、提取特定位以及判断奇偶性等。在编程中,掌握按位与操作的基本特性和应用场景,能够灵活地应用它来解决各种问题。希望通过本文对按位与操作有了更深入的了解,并能在编程中灵活应用它。

weixin_74769483的博客 3万+

【Unity】【VR】如何让Distance Grab抓取物品时限制物品的Rotation

VR中Canvas抓取旋转问题的解决方案 在VR应用中,Canvas作为UI面板常需被抓取拖动,但默认会随手柄产生Z轴旋转,导致UI歪斜。Unity的Rigidbody冻结旋转功能对此无效,因为XR抓取直接修改Transform而非物理模拟。

每日出拳老爷子的博客 611

1.1 了解Spring框架 -《SSM深入解析与项目实战》

文章目录第1篇 基础概念第1章 谈谈SSM框架和Redis1.1 了解Spring框架1.1.1 如何学习Spring1.1.2 IoC(Inversion of Control 控制反转)1.1.3 AOP(Aspect Oriented Programing面向切面编程) 项目中所有的源码都可以在此链接的仓库中找到:https://github.com/chenhaoxiang/uifuture-ssm 本章非常形象的介绍了Springn中最核心的两个概念,IoC和AOP,使用了现实中的例子

谙忆-陈浩翔 2135

c语言之异或运算

c语言之异或运算 异或运算,计算机相关专业比较熟悉了。相同为0,不同为1.结合计算机内部的位运算,a^a=0;与本身异或是为0的。有关的知识运用到数据交互中去。 void int_swap(int *x,int *y){ *y=*x^*y;//step1 *x=*x^*y;//step2 *y=*x^*y;//step3 } 运用这个函数就能完成两个数据交换。但是并没有提高时间复杂度和空间复杂度,有关书籍上称之为智力游戏。我们来看看数据的变化。 假设*x=a,*y=b. *x *y

zmm0628的博客 1万+

使用 Tesseract 在 C# 中进行光学字符识别(OCR)

你可以根据需要对 Tesseract 进行自定义配置,例如设置识别的分辨率、识别模式等。// 只识别数字// 设置自定义变量本文只讲述了简单的使用方法,未涉及字库训练,识别的准确率与训练的字库有关。

仰望星空的博客 4733

C语言笔记:操作符

1.算数操作符 + - * / % 注: 1. 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。 2. 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。 3. % 操作符的两个操作数必须为整数。返回的是整除之后的余数。 void test1() { //6.0 % 2.0; //不是整型,err int a= 6 / 2; int b = 7 / 2; double c = 7 / 2.0; printf("a = %d b

m0_62934529的博客 1645

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

C语言——操作符详解

目录 操作符分类: 1、算术操作符 2、位操作符 3、赋值操作符 4、单目操作符 5、关系操作符 6、逻辑操作符 7、条件操作符 8、逗号操作符 9、下标引用、函数调用和结构成员 1、算术操作符 + - * / % % 是取模操作符,意思就是 求余数。 int ret = 10 % 3; //求10 % 3的余数,得出的余数是1 printf("%d\n", ret); 注意的是:% .........

weixin_57525369的博客 7553

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

(c语言)理解异或操作符

本文将讲到异或操作符的用法

wcblh的博客 1145

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【c 语言 】位操作符详解

本文将详细解析C语言中的位操作符,包括按位与(&)、按位或(|)和按位异或(^)操作符的工作原理、示例代码以及应用场景,帮助读者深入理解和运用这些强大的工具。

m0_74195174的博客 3372

【C语言刷题】——初识位操作符

本文包含:不创建临时变量(第三个变量),实现两个数的交换、求一个数存储在内存中的二进制中“一”的个数、单身狗一、单身狗二,一共四题的详细讲解!

yusjushd的博客 1295

异或^操作符(C语言)

一、 简介 1. 异或^操作符:是一个位操作符,针对于二进制位(比特位)的操作。 2. 规则:两个数在同一个二进制位(比特位),相同为0;不同为1。 3. 异或操作符的一些性质: 3.1 任何一个数与自己异或都等于0: a^a=0; 3.2 任何一个数与0进行异或操作等于它自己: a^0=a; 3.3 异或运算满足交换律,结合律 : a^b=b^a; (a^b)^c=a^(b^c); 二、示例 示例1: 题目要求:交换两个int变量的值,不能使用第三个变量,如a=3,b=5,交换后a=5,b=3; 代

weixin_61253613的博客 6759

【C语言】异或操作符‘^’

异或(^)的巧妙运用,与讲解

2202_75560428的博客 1043

C语言操作符

我们首先将操作符分类,并通过表格详细说明每种类型的操作符。操作符在C语言中非常重要,它们帮助我们完成各种计算任务,包括数学计算、逻辑判断、位运算等。左移操作通常会导致数值乘以2的倍数(每左移一位,数值乘以2)。优先级决定了在同一个表达式中,多个运算符的执行顺序。当表达式中的操作数类型不同,C语言会根据某些规则进行类型转换。结合性决定了同一优先级的运算符的执行顺序。逐位比较两个数的对应位,只有当两个位不相同时,结果才为。逐位比较两个整数的对应位,只有当两位都为。的运算符,操作数会从右向左进行运算。

maomi_9526的博客 1143

C语言中的异或运算

先前的文章中我已经写过关于一些基本的算术操作符的使用,这次我们来介绍一下先前没有介绍的一个操作符,叫做异或操作符(^)。C 语言中的异或操作符是,表示按位异或运算。异或操作是一种逻辑运算,针对两个值的对应位进行比较,如果相应位相同则结果为 0,不同则结果为 1。具体来说,对于两个操作数 A 和 B,A ^ B 的结果是将 A 和 B 每个对应的位进行异或操作得到的值。例如,对于十进制数 5 和 3,其对应的二进制表示分别为 101 和 011,进行异或操作后得到的结果为 110,即十进制的 6。

bhbcdxb123的博客 2679

C语言最详细讲解操作符

例题加图解,飞龙骑脸,学不会来找我

m0_66483195的博客 1446

C语言^异或操作符使用

C语言异或运用

qq_52113349的博客 1万+

C语言操作符详解

各位看官们好,这是鄙人的第9篇博客了,这次我们来了解C语言中的操作符。虽然我们在前面的博客中已经提到过一些操作符了,这里我们来详细的写出C语言中的操作符了,并且新春之际,鄙人在这祝各位看官新年快乐!算数操作符(+ - / %)位移操作符(>)位操作符(& | ^与,或,异或)赋值操作符(=)单,双目操作符。

2302_80318761的博客 1316

C语言 | 详解操作符

在小学和中学时期,我们学过许多运算符,其中包括加、减、乘、除、开方、平方等等,而在C语言中,我们也有一些操作数据的符号,我们称之为操作符(运算符)。本文会将这些运算符 一 一讲解。

Nice_W的博客 3842
上一篇: 二进制序列翻转求和问题
下一篇: 数组元素旋转和交换问题
Python_programer
博客等级 码龄9年 25粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值