博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
不使用临时变量,交换两个变量的值
阅读量:6687 次
发布时间:2019-06-25

本文共 591 字,大约阅读时间需要 1 分钟。

涉及到两个变量值的交换,通常的做法是定义一个临时变量,然后再进行交换。利用异或运算,可以实现交换两个值,而不用临时变量。

 

一.基础知识

异或是一种基于二进制的位运算,用符号XOR或者^表示,其运算法则是对运算符两侧数的每一个二进制位,同值取0,异值取1。

性质如下:

  1. 交换律        (a^b = b^a)
  2. 结合律        ((a^b)^c = a^(b^c))
  3. 对于任何数x,都有x^x = 0,x^0 = x

二.实现分析

使用异或运算交换变量a和b的过程如下:

a = a ^ b;

b = b ^ a;

a = a ^ b;

对于开始的两个赋值语句,"a = a ^ b; b = b ^ a;", 相当于 b = b ^ (a ^ b) = a ^ (b ^ b) = a ^ 0 = a。同理可以分析第三个赋值语句,a = a ^ b = (a ^ b) ^ a = b。

c++示例代码如下:

#include
void main(){ int a = 2, b = 6; a = a ^ b; b = b ^ a; a = a ^ b; printf("a = %d; b = %d\n", a, b);}

转载于:https://www.cnblogs.com/minisculestep/p/4887854.html

你可能感兴趣的文章
vlc做转发的命令
查看>>
跨站请求伪造CSRF
查看>>
关于同一用户不能同时登录问题的探讨(2/2)
查看>>
session 防止表单重复提交
查看>>
Windows Phone开发(1):概论
查看>>
如何修改博客样式
查看>>
C#语法之泛型
查看>>
ArcGIS API for Silverlight中加载Google地形图(瓦片图)
查看>>
如何生成excel文件作为图像识别结果
查看>>
Liferay-Activiti 功能介绍 (新版Liferay7基本特性)
查看>>
ORACLE删除当前用户下所有的表的方法
查看>>
html php 重定向 跳转 刷新
查看>>
Dom4j解析xml
查看>>
佛祖保佑,永无bug
查看>>
Lucene学习总结之五:Lucene段合并(merge)过程分析
查看>>
ubuntu 安装过程记录
查看>>
my blog zen :分享所学,backup一切~
查看>>
JAVA上加密算法的实现用例MD5/SHA1,DSA,DESede/DES,Diffie-Hellman的使用(转)
查看>>
武侠-event
查看>>
学习C# delegate和C# event
查看>>