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

【C语言干货】面试 | 不使用临时变量实现两个整数的交换

文章目录

  • 题目:不使用临时变量实现两个整数的交换
    • 代码
    • 代码解释

题目:不使用临时变量实现两个整数的交换

代码

#include <stdio.h>int main() {int a = 10;int b = 20;// 第一步:a = a ^ b;a = a ^ b;// 第二步:b = a ^ b;b = a ^ b;// 第三步:a = a ^ b;a = a ^ b;// 输出交换后的结果printf("a = %d  b = %d\n", a, b);return 0;
}

在这里插入图片描述

代码解释

在这里插入图片描述

这段代码通过三次位异或运算实现了两个整数的交换,而没有使用任何临时变量。让我们逐步分析这个过程:
第一步:a = a ^ b;
这一步将 a 和 b 进行异或运算,结果存储在 a 中。此时,a 包含了 a 和 b 的异或结果。
第二步:b = a ^ b;
这一步将新的 a(即 a^b)和原来的 b 进行异或运算,结果存储在 b 中。由于 abb 等于 a,所以 b 现在等于原来的 a。
第三步:a = a ^ b;
这一步将新的 a(即 a^b)和新的 b(即原来的 a)进行异或运算,结果存储在 a 中。由于 (ab)a 等于 b,所以 a 现在等于原来的 b。
异或运算的性质
异或运算符(^)具有以下性质,这些性质使得它非常适合用于交换变量:
交换律:a ^ b ^ b = a
结合律:(a ^ b) ^ b = a
自反性:a ^ a = 0
零元性:a ^ 0 = a
这些性质确保了通过三次异或运算,我们可以在不使用临时变量的情况下交换两个变量的值。

http://www.xdnf.cn/news/1658.html

相关文章:

  • PageView 内嵌套 TabBarView 的滑动冲突
  • PySide6 GUI 学习笔记——常用类及控件使用方法(常用类矩阵QRectF)
  • 在Vue3中,如何在父组件中使用v-model与子组件进行双向绑定?
  • DNS实验
  • 【Python语言基础】24、并发编程
  • 学习记录:DAY17
  • 机器学习(7)——K均值聚类
  • 【python】一文掌握 markitdown 库的操作(用于将文件和办公文档转换为Markdown的Python工具)
  • .NET代码保护混淆和软件许可系统——Eziriz .NET Reactor 7
  • Postgresql源码(143)统计信息基础知识(带实例)
  • Zynq7020 制作boot.bin及烧录到开发板全流程解析
  • 【AI平台】n8n入门1:详细介绍n8n的多种安装方式(含docer图形化安装n8n)
  • sass 变量
  • spark-streaming(二)
  • Python 爬虫实战 | 企名科技
  • 基于Pytorch的深度学习-第二章
  • 《仙剑奇侠传二》游戏秘籍
  • 01.02、判定是否互为字符重排
  • SpringCloud——负载均衡
  • 自动化标注软件解析
  • 颠覆传统NAS体验:耘想WinNAS让远程存储如同本地般便捷
  • 【leetcode100】组合总和Ⅳ
  • 【踩坑记录】stm32 jlink程序烧录不进去
  • 《Learning Langchain》阅读笔记7-RAG(3)生成embeddings
  • react 子组件暴露,父组件接收
  • Qt 入门 6 之布局管理
  • TinyVue v3.22.0 正式发布:深色模式上线!集成 UnoCSS 图标库!TypeScript 类型支持全面升级!
  • 架构-项目管理
  • 半导体---检测和量测
  • Shader 空间变换(七)