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

【嵌入式 C 常用算法 2 -- 变量值交换函数异或方式实现】

文章目录

    • 变量值交换函数异或方式实现

变量值交换函数异或方式实现

在C语言中,可以使用异或运算符(^)来进行两个数的交换,而不需要使用额外的临时变量。这种交换方式的基础是异或运算的以下性质:

  • 任何数和 0 做异或运算,结果仍然是原来的数,即 a ^ 0 = a
  • 任何数和其自身做异或运算,结果是 0,即 a ^ a = 0
  • 异或运算满足交换律和结合律,即 a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c

具体的函数实现如下:

void swap(int *a, int *b) 
{ if (a != b) { // 防止a和b指向同一个地址 *a ^= *b; *b ^= *a; *a ^= *b; } 
}

以下是对代码的详细介绍:

  • void swap(int *a, int *b): 这是一个名为swap的函数,它接受两个整型指针作为参数,用于交换这两个指针所指向的值。
  • if (a != b): 这是一个判断语句,用于检查两个指针是否指向同一个地址。如果指向同一个地址,那么交换操作就没有意义,因为交换的是同一个值。
  • *a ^= *b; : 首先,将a和b的值进行异或运算,然后将结果赋值给a。此时,a的值其实是原来的a和b的值的异或结果。
  • *b ^= *a; : 然后,将b和新的a的值进行异或运算,然后将结果赋值给b。由于新的a的值是原来的a和b的值的异或结果,通过这个运算,b的值其实就变成了原来的a的值。
  • *a ^= *b; : 最后,将a和b的值进行异或运算,然后将结果赋值给a。由于b的值已经变成了原来的*a的值,通过这个运算,a的值就变成了原来的b的值。

这就完成了两个值的交换,而且没有使用额外的临时变量。

验证函数

#include <stdio.h>void swap(int *a, int *b) 
{ if (a != b) { // 防止a和b指向同一个地址 *a ^= *b; *b ^= *a; *a ^= *b; } 
}void main(void)
{int a = 0, b = 1;swap(&a, &b);printf("a:%d, b:%d\n", a, b);
}
gcc -g test.c -o test(*^~^*) ~/test$ ./test
a:1, b:0

相关文章:

【嵌入式 C 常用算法 2 -- 变量值交换函数异或方式实现】

文章目录 变量值交换函数异或方式实现 变量值交换函数异或方式实现 在C语言中&#xff0c;可以使用异或运算符&#xff08;^&#xff09;来进行两个数的交换&#xff0c;而不需要使用额外的临时变量。这种交换方式的基础是异或运算的以下性质&#xff1a; 任何数和 0 做异或运…...

Hadoop HDFS(分布式文件系统)

一、Hadoop HDFS(分布式文件系统) 为什么要分布式存储数据 假设一个文件有100tb&#xff0c;我们就把文件划分为多个部分&#xff0c;放入到多个服务器 靠数量取胜&#xff0c;多台服务器组合&#xff0c;才能Hold住 数据量太大&#xff0c;单机存储能力有上限&#xff0c;需要…...

力扣1.两数之和

原题链接&#xff1a;1.两数之和 根据题意可以得出 需要找出数组nums内 有两个元素相加等于target的两个整数&#xff0c;并且返回这两个证书的下标。并且数组内有重复元素&#xff0c;但是返回的答案不能有重复元素出现 要记住的就是&#xff0c;需要判断元素是否出现过&…...

JTA分布式事务管理器

XA协议:是一种标准协议&#xff0c;允许事务管理器协调多个资源管理器&#xff0c;确保在分布式事务中的一致性和原子性。 JTA:是JavaEE规范中的一种&#xff0c;用于管理分布式事务的 API&#xff0c;提供了事务的控制和协调机制 Atomikos理解成JTA的实现 XA是JTA的基础(JT…...

晨控CK-GW08系列网关控制器与CODESYS软件MODBUSTCP通讯手册

晨控CK-GW08系列是一款支持标准工业通讯协议ModbusTCP的网关控制器,方便用户集成到PLC等控制系统中。系统还集成了8路读写接口&#xff0c;用户可通过通信接口使用Modbus TCP协议对8路读写接口所连接的读卡器进行相对独立的读写操作。 晨控CK-GW08系列网关控制器适用于本公司多…...

读书笔记——labuladong算法笔记

读书笔记——labuladong算法笔记 序言计算机算法世界观计算机算法方法论二叉树遍历广度遍历BFS二叉树的前中后序遍历回溯算法动态规划算法二分搜索算法 其他算法滑动窗口双指针Union-Find算法 序言 labuladong算法笔记是一本讲解算法题求解技巧的书。本次读书笔记为2023年8月第…...

Linux中阶教程:bash shell基础

文章目录 输入输出赋值和计算条件判断函数for 循环数组及其遍历其他控制语句 输入输出 echo表示打印字符串&#xff1b;read表示获取用户输入&#xff1b;$用于引用变量。 # test1.sh bash中用#进行单行注释 echo "input your name:" read user_name echo "h…...

Golang 编译原理

简介 Golang&#xff08;Go语言&#xff09;是一种开源的编程语言&#xff0c;由Google开发并于2009年首次发布。它具备高效、可靠的特性&#xff0c;被广泛应用于云计算、分布式系统、网络服务等领域。Golang的编译原理是理解和掌握这门语言的重要基础之一。本文将介绍Golang…...

基于深度学习的动物识别 - 卷积神经网络 机器视觉 图像识别 计算机竞赛

文章目录 0 前言1 背景2 算法原理2.1 动物识别方法概况2.2 常用的网络模型2.2.1 B-CNN2.2.2 SSD 3 SSD动物目标检测流程4 实现效果5 部分相关代码5.1 数据预处理5.2 构建卷积神经网络5.3 tensorflow计算图可视化5.4 网络模型训练5.5 对猫狗图像进行2分类 6 最后 0 前言 &#…...

计算机视觉基础——基于yolov5-face算法的车牌检测

文章目录 车牌检测算法检测实现1.环境布置2.数据处理2.1 CCPD数据集介绍2.1.1 ccpd2019及20202.1.2 文件名字解析 2.2数据集处理2.2.1 CCPD数据处理2.2.2 CPRD数据集处理 2.3 检测算法2.3.1 数据配置car_plate.yaml2.3.2 模型配置2.3.3 train.py2.3.4 训练结果 2.4 部署2.4.1 p…...

【好书推荐】AI时代架构师修炼之道:ChatGPT让架构师插上翅膀

目录 前言 ChatGPT对架构师工作的帮助 快速理解和分析需求 提供代码建议和解决方案 辅助系统设计和优化 提高团队协作效率 如何使用ChatGPT提高架构师工作效率 了解用户需求和分析问题 编码实践和问题解决 系统设计和优化建议 团队协作和沟通效率提升 知识管理和文…...

全局代理和局部代理的区别

在计算机领域中&#xff0c;代理是一种常见的网络技术&#xff0c;它可以帮助用户更好地控制网络访问和数据传输。代理可以分为全局代理和局部代理两种&#xff0c;它们有着不同的作用和适用场景。 一、全局代理 全局代理指的是在系统级别设置的代理&#xff0c;它可以代理所…...

基于EPICS stream模块的直流电源的IOC控制程序实例

本实例程序实现了对优利德UDP6720系列直流电源的网络控制和访问&#xff0c;先在此介绍这个项目中使用的硬件&#xff1a; 1、UDP6721直流电源&#xff1a;受控设备 2、moxa串口服务器5150&#xff1a;将UDP6721直流电源设备串口连接转成网络连接 3、香橙派Zero3&#xff1a;运…...

Unity3D ECS架构适合作为主架构还是局部架构

前言 前言 Unity3D是一款广泛应用于游戏开发的跨平台游戏引擎&#xff0c;提供了丰富的功能和工具来简化游戏开发的过程。而Entity-Component-System&#xff08;ECS&#xff09;架构则是一种面向数据的设计模式&#xff0c;它将游戏对象&#xff08;Entity&#xff09;分解为…...

从零开始的目标检测和关键点检测(三):训练一个Glue的RTMPose模型

从零开始的目标检测和关键点检测&#xff08;三&#xff09;&#xff1a;训练一个Glue的RTMPose模型 一、重写config文件二、开始训练三、ncnn部署 从零开始的目标检测和关键点检测&#xff08;一&#xff09;&#xff1a;用labelme标注数据集 从零开始的目标检测和关键点检测…...

Qt6 中弹出消息框,一段时间后自动退出

以下代码功能&#xff0c;弹出模态消息框&#xff0c;然后&#xff0c;等待 3 秒&#xff0c;消息框自动退出 QMessageBox msgbox;msgbox.setText("sleep 3s");QTimer::singleShot(3000, &msgbox, &QMessageBox::close);msgbox.exec();...

elementUI树节点全选,反选,半选状态

// <template>部分 <div class"check-block"><el-divider></el-divider><el-checkbox :indeterminate"indeterminate" v-model"checkAll" change"handleCheckAllChange">全选</el-checkbox><e…...

Kafka、RabbitMQ、RocketMQ中间件的对比

消息中间件现在有不少&#xff0c;网上很多文章都对其做过对比&#xff0c;在这我对其做进一步总结与整理。 RocketMQ 淘宝内部的交易系统使用了淘宝自主研发的Notify消息中间件&#xff0c;使用Mysql作为消息存储媒介&#xff0c;可完全水平扩容&#xff0c;为了进一步降低成…...

Mac 创建并使用 .zshrc 文件

1&#xff0c;打开终端输入指令 touch .zshrc 2&#xff0c;你可能希望将 .bash_profile 文件中的内容复制到 .zshrc 文件中&#xff0c;那建议复制过来。 3&#xff0c;使用 .zshrc 文件 执行以下指令&#xff1a; source .zshrc 注&#xff1a;以后希望使用 .bash_prof…...

Unity3D移动开发如何依据性能选择Shader

前言 在Unity3D移动开发中&#xff0c;选择合适的Shader是非常重要的&#xff0c;它直接影响到游戏的性能和画面效果。本文将介绍如何依据性能选择Shader&#xff0c;并给出相应的技术详解以及代码实现。 对惹&#xff0c;这里有一个游戏开发交流小组&#xff0c;希望大家可以…...

Cacti插件开发实战:从零开始创建自定义插件

Cacti插件开发实战&#xff1a;从零开始创建自定义插件 【免费下载链接】cacti Cacti ™ 项目地址: https://gitcode.com/gh_mirrors/ca/cacti Cacti是一款强大的网络监控和数据采集工具&#xff0c;通过插件系统可以轻松扩展其功能。本文将带你从零开始&#xff0c;掌握…...

5分钟快速搭建Windows RTMP流媒体服务器:新手完整指南

5分钟快速搭建Windows RTMP流媒体服务器&#xff1a;新手完整指南 【免费下载链接】nginx-rtmp-win32 Nginx-rtmp-module Windows builds. 项目地址: https://gitcode.com/gh_mirrors/ng/nginx-rtmp-win32 想要在Windows系统上搭建自己的直播服务器吗&#xff1f;nginx…...

在Node.js服务中集成Taotoken实现多模型智能对话

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在Node.js服务中集成Taotoken实现多模型智能对话 应用场景类&#xff0c;描述一个Node.js后端服务需要集成大模型能力的场景&#…...

ComfyUI-Impact-Pack V8:AI图像增强的模块化架构革新与性能突破

ComfyUI-Impact-Pack V8&#xff1a;AI图像增强的模块化架构革新与性能突破 【免费下载链接】ComfyUI-Impact-Pack Custom nodes pack for ComfyUI This custom node helps to conveniently enhance images through Detector, Detailer, Upscaler, Pipe, and more. 项目地址:…...

3分钟搞定Steam游戏清单!Onekey工具让游戏文件管理变得如此简单

3分钟搞定Steam游戏清单&#xff01;Onekey工具让游戏文件管理变得如此简单 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey 还在为复杂的Steam游戏文件管理而烦恼吗&#xff1f;想要备份游戏清单…...

华为设备上MQC实战:用流策略搞定网络流量路径规划(含ACL+OSPF联动)

华为设备MQC高级应用&#xff1a;动态路由环境下的智能流量路径规划 在复杂的企业网络环境中&#xff0c;流量路径规划往往成为网络工程师面临的核心挑战之一。当网络中存在多条等价路径时&#xff0c;传统的路由协议&#xff08;如OSPF&#xff09;会基于简单的哈希算法进行负…...

在国产飞腾ARM平台(银河麒麟V10)上搞定WireGuard编译:一个内核版本不匹配的实战修复记录

在国产飞腾ARM平台&#xff08;银河麒麟V10&#xff09;上搞定WireGuard编译&#xff1a;内核兼容性深度解析与实战 国产化替代浪潮下&#xff0c;越来越多的企业和机构开始将关键业务迁移到国产操作系统和硬件平台。银河麒麟V10作为国产操作系统的代表之一&#xff0c;搭配飞…...

告别仿真卡顿!Synopsys AXI VIP Memory模型实战:从地址配置到后门读写(附避坑指南)

告别仿真卡顿&#xff01;Synopsys AXI VIP Memory模型实战&#xff1a;从地址配置到后门读写&#xff08;附避坑指南&#xff09; 在复杂SoC验证中&#xff0c;仿真速度直接决定了项目周期。当AXI总线上的数据吞吐量达到GB/s级别时&#xff0c;传统的前门读写操作会让仿真器陷…...

mpv.net 高效配置实战:从媒体播放到专业调优的进阶指南

mpv.net 高效配置实战&#xff1a;从媒体播放到专业调优的进阶指南 【免费下载链接】mpv.net &#x1f39e; mpv.net is a media player for Windows with a modern GUI. 项目地址: https://gitcode.com/gh_mirrors/mp/mpv.net 作为一款基于mpv核心的现代化Windows媒体播…...

如何用btcrecover快速找回丢失的比特币钱包密码与助记词:完整指南

如何用btcrecover快速找回丢失的比特币钱包密码与助记词&#xff1a;完整指南 【免费下载链接】btcrecover An open source Bitcoin wallet password and seed recovery tool designed for the case where you already know most of your password/seed, but need assistance i…...