【嵌入式 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

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

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

相关文章

【开发新的】apache common BeanUtils忽略null值

前言: BeanUtils默认的populate方法不会忽略空值和null值&#xff0c;在特定场景&#xff0c;我们需要原始的值避免被覆盖&#xff0c;所以这里提供一种自定义实现方式。 package com.hmwl.service.program;import lombok.extern.slf4j.Slf4j; import org.apache.commons.beanu…

不会搭建企业网,建议你不要点开这篇文章

中午好&#xff0c;我是老杨。 企业网络搭建一直是网工技术里的基础且重要的部分&#xff0c;一些小白粉丝和我反馈&#xff0c;技术是了解一些&#xff0c;但是整体逻辑搭建不起来。 企业网是很多网工都会面临的一个工作日常环境。 但是&#xff0c;尽管很多人每日接触&…

15个常用网络端口解释【网络工程师必备技能】

网络端口概述 作为服务器管理员&#xff0c;需要了解的许多基本事项是一些常用服务使用的功能和端口号。正如IP地址标识计算机一样&#xff0c;网络端口标识计算机上运行的应用程序或服务。 在计算机网络中&#xff0c;端口是通信端点。通常&#xff0c;端口标识分配给它们的特…

react-router

一、react-router是什么 react-router是一个用于管理React应用程序中路由的库。路由是指确定应用程序如何根据URL路径来渲染不同的组件和页面。使用react-router可以将应用程序的不同页面映射到不同的URL路径&#xff0c;以及在用户导航时动态地加载适当的组件。这样&#xff…

shardingphere Sharding count cannot be null解决方案

shardingphere Sharding count cannot be null解决方案 问题背景解决方案Lyric&#xff1a; 我知道坚持要走 问题背景 使用shardingphere分表分库时&#xff0c;出现分表算法设置错误 Caused by: java.lang.IllegalArgumentException: Sharding count cannot be null.at com.…

mapbox使用marker创建html点位信息

mapbox使用marker创建html点位信息 codePen地址 mapboxgl.accessToken "pk.eyJ1IjoibGl1emhhbzI1ODAiLCJhIjoiY2xmcnV5c2NtMDd4eDNvbmxsbHEwYTMwbCJ9.T0QCxGEJsLWC9ncE1B1rRw"; const center [121.29786, 31.19365]; const map new mapboxgl.Map({container: &quo…

双十一买电视盒子什么牌子好?拆机达人强推目前性能最好的电视盒子

我这几年拆过的电视盒子已经有40多款了&#xff0c;最近看到网友们在讨论双十一电视盒子怎么挑选&#xff0c;就我拆机的经验来说&#xff0c;有些产品在硬件上存在问题的确较多&#xff0c;不知道双十一买电视盒子什么牌子好&#xff0c;可以参考我整理的目前性能最好的电视盒…

windows 运行 Mysql Command Line Client 自动关闭闪退原因分析

目录 原因分析一 原因分析二 原因分析三 第一次使用 MySQL Command Line Client 有可能输入密码后一按下回车键&#xff0c;程序窗口就自动关闭&#xff0c;出现闪退现象。本节主要分析产生闪退现象的原因以及如何处理这种情况。 原因分析一 首先可以查看程序默认执行文件…

电源管理(PMIC)MAX20428ATIA/VY、MAX20428ATIC/VY、MAX20428ATIE/VY适合汽车ADAS应用的开关稳压器

一、概述 MAX20428是一款高效率、八路输出、低压PMIC。OUT1将输入电源升压至5V&#xff0c;电流高达500mA&#xff0c;而三个同步降压转换器的输入电压范围为3.0V至4.2V&#xff0c;输出电压范围为0.8V至3.9875V&#xff0c;峰值电流分别高达1.3A、1.3A和3.5A。三个300mA pMOS…

团队表 -多级团队设计

团队表 -多级团队设计 user_team团队表 &#xff0c;如果存在子团队 1.我们可以通过每一个团队字段加一个parentid &#xff08;相当于一对多的关系&#xff09; 2.还可以设置一个字段CodingNum,比如这样: //系统为了管理查询团队自动生成的有序编号 可以使用3位数代表一个…

160.相交链表

160.相交链表 题目链接算法 双指针相向而行 & 题目特征 寻找两个数组&#xff08;或链表&#xff09;中的匹配项 题目链接 https://leetcode.cn/problems/intersection-of-two-linked-lists/ 算法 双指针相向而行 & 题目特征 寻找两个数组&#xff08;或链表&…

Spring cloud教程Gateway服务网关

Spring cloud教程|Gateway服务网关 写在前面的话&#xff1a; 本笔记在参考网上视频以及博客的基础上&#xff0c;只做个人学习笔记&#xff0c;如有侵权&#xff0c;请联系删除&#xff0c;谢谢&#xff01; Spring Cloud Gateway 是 Spring Cloud 的一个全新项目&#xff0c;…

redission分布式锁避坑指南

常见用法 RLock lock redisson.getLock("anyLock"); try{ // 1. 最常见的使用方法 //lock.lock(); // 2. 支持过期解锁功能,10秒钟以后自动解锁, 无需调用unlock方法手动解锁 //lock.lock(10, TimeUnit.SECONDS); // 3. 尝试加锁&#xff0c;最多等待3秒&#xff0c…

JS中null和undefined的区别

首先 Undefined 和 Null 都是基本数据类型&#xff0c;这两个基本数据类型分别都只有一个值&#xff0c;就是 undefined 和 null。 undefined 代表的含义是未定义&#xff0c;null 代表的含义是空对象。一般变量声明了但还没有定义的时候会返回 undefined&#xff0c;null主要…

使用HttpClient库的爬虫程序

使用HttpClient库的爬虫程序&#xff0c;该爬虫使用C#来抓取内容。 using System; using System.Net.Http; using System.Threading.Tasks; ​ namespace CrawlerProgram {class Program{static void Main(string[] args){// 创建HttpClient对象using (HttpClient client new…

Ubuntu更新apt-get安装镜像源

前往清华开源镜像站获取镜像链接 修改镜像源&#xff0c;打开配置文件&#xff0c;将镜像源链接粘贴到配置文件 sudo vim /etc/apt/sources.list更新软件列表到本地 sudo apt-get update更新所有软件&#xff08;非必要&#xff09; sudp apt-get upgrade

java入门,程序=数据结构+算法

一、前言 在学习java的时候&#xff0c;我印象最深的一句话是&#xff1a;程序数据结构算法&#xff0c;对于写java程序来说&#xff0c;这就是java的入门。 二、java基本数据结构与算法 1、数据类型 java中的数据类型8种基本数据类型&#xff1a; 整型 byte 、short 、int…

win7中安装node14和vue

下载并安装低版本node 13 到官网去找早期历史版本的 nodejs 13 msi格式即可&#xff0c;并一键安装&#xff0c;我安装在了 D:\Program Files\nodejs 目录下 https://nodejs.org/download/release/v13.14.0/ 下载高版本node 14 下载高版本的node zip包 https://nodejs.org/…

VMware打开centos黑屏解决方法汇总以及解决出现的bug(Centos7系统网络异常等)

VMware打开centos黑屏解决方法汇总 前言&#xff1a;一. VMware打开centos黑屏解决方法汇总一 .情况情况一&#xff1a;情况二情况三 二. 解决方法最简单的方法&#xff1a;一. 以管理员权限在命令行执行1. 管理员身份运行cmd2. 输入“netsh winsock reset”,回车3. 重启电脑即…

影视企业有哪些方式将视频文件快速海外跨国传输国内?

影视行业是一个高度国际化的行业&#xff0c;影视企业在跨国合作、制作、发行等方面有着强烈的需求。然而&#xff0c;影视企业在跨国文件传输方面也面临着诸多的问题和难题。视频文件通常具有较大的文件大小、多样的文件格式、高要求的文件质量等特点&#xff0c;这些特点使得…