在一般情况下,我们交换两个变量的数据都需要第三个变量作为中间变量,如下

#include <stdio.h>
int main()
{int a = 10;int b = 20;int c;printf("交换前a = %d,b = %d\n",a,b);c = b;b = a;a = c;printf("交换后a = %d,b = %d\n",a,b);return 0;
}


那么怎样才能不使用第三个变量来实现两个变量数据的交换呢?

异或运算
在各种计算机语言中,如C、C++等,使用按位异或的思想执行的操作。异或逻辑的关系是:当AB不同时,输出P=1;当AB相同时,输出P=0。“⊕”是异或数学运算符号,异或逻辑也是与或非逻辑的组合,其逻辑表达式为:P=A⊕B。在计算机语言中,异或的符号为” ^ “。

一个数跟自己异或等于0,跟0异或等于本身,比如1010 ^ 1010 = 0000,1010 ^ 0000 = 1010
不使用中间变量实现两个变量的交换就是利用的异或运算来实现的

关键交换代码

a = a ^ b;
b = b ^ a;//b=b ^ a^b = 0^a = a
a = a ^ b;//a=a^b ^ b^a^b = 0^0^b = b

转换为二进制代码更加清楚

a = 1010 b = 0101
a = a^b = 1010^0101 = 1111
b = b^a = 0101^1111 = 1010
a = a^b = 1111^1010 = 0101

具体代码如下

#include <stdio.h>
int main()
{int a = 100;int b = 200;printf("交换前a = %d,b = %d\n",a,b);a = a ^ b;b = b ^ a;a = a ^ b;printf("交换后a = %d,b = %d\n",a,b);return 0;
}


这样就实现了不使用中间变量来交换两个变量的数据。

C语言不使用中间变量交换两个变量的数据相关推荐

  1. C语言宏定义实现交换两个变量方法汇总

    小硕第三个年头了,最近小编忙着各种跑宣讲会,参加各种面试,搞的遍体鳞伤.今天难得静下心来,先总结下有关"交换两个变量的宏定义实现"的三种方式,相信没思考过的朋友们第一次遇到这种问题 ...

  2. C语言位操作--不用中间变量交换两数值

    1.使用加法与减法交换两数值: #define SWAP(a, b) ((&(a) == &(b)) || \(((a) -= (b)), ((b) += (a)), ((a) = ( ...

  3. 【C语言刷题】交换两个变量(包含不创建临时变量)的解法

    目录 一.常规方法(引入空瓶变量) 二.题目要求,不允许创建临时变量 2.1 通过两数加法实现交换 2.2 按位异或操作符实现交换 题目:写代码实现两个变量的交换.(不允许创建临时变量) 一.常规方法 ...

  4. C语言如何使用函数交换两个变量的值

    函数交换变量值 首先咱们先来看一下平常咱们会想到的一个方法 定义一个临时变量来交换数值 #include<stdio.h> #include<stdlib.h> void sw ...

  5. 不用中间变量交换两个变量的值

    int a = 2,b = 3; public void ChangeNum(){ a = a ^ b; b = a ^ b; //a ^ b ^ b = a,b ^ a ^ a = b a = a ...

  6. 用html5交换两个变量的值,Python判断两个对象相等的原理 python交换两个变量的值为什么不用中间变量...

    python语言设计一个类代表花,其中含2个对象属性,2class flower: def __init__ (self, name, shape): self.name = name self.sh ...

  7. C语言写一函数交换两变量的值

    C语言写一函数交换两变量的值 #include <stdio.h> void swap(int *p1, int *p2); // 形参,只声明 int main(){int a=5, b ...

  8. C语言中的关键字,变量的定义,变量的命名规则,交换两个变量的值,驼峰命名法【 C语言变量名命名法则】

    C语言结构 C语言中的关键字 变量 变量的定义 变量的命名规则 交换两个变量的值 驼峰命名法 C语言结构 上图中我们可以看到最外层是程序,内部是所有的构成,我们从最里面开始说明. 当我们用计算机语言来 ...

  9. 在不借助中间变量的前提下,交换两个变量的值

    借助中间变量,可以很方便的交换两个变量的值.如果不借助中间变量,同样可以达到交换变量的目的. 数值相加减进行交换 int a = 10; int b = 12; a = b - a; //a = 2, ...

  10. 【C语言练习——交换两个变量的值】

    交换两个变量的值 前言 1.创建临时变量--一般方法 2.创建临时变量--指针 3.不创建临时变量--加减法 4.不创建临时变量--异或 总结 前言 本文练习交换两个变量的值,大体上分为两类方法,创建 ...

最新文章

  1. 数字双胞胎技术和物联网如何帮助企业取得成功
  2. python画图程序-无所不能的python编程是怎么快速画图的呢?5分钟学会!
  3. 转载:【OpenCV入门教程之五】 分离颜色通道多通道图像混合
  4. 小程序字符串拼接_小程序突袭预约!Yeezy 350quot;氧化满天星quot;拼接配色本月发售!...
  5. Open3d之点云离群点剔除
  6. presto array_join函数
  7. jq校验输入框值变化时_用jq把span的值实时改变input的val值
  8. [CTF]RAR加密原理
  9. 《客户端性能测试基本流程》
  10. Mac怎么创建加密文件夹
  11. python 动态for循环的循环范围_Python中for循环的动态范围
  12. mysql介绍索引类型的章节_mysql索引总结--mysql索引类型以及创建的详细介绍
  13. 思科CCNA第一本教材 第十一章 配置和测试网络 个人总结
  14. 每日一书丨数据治理的这些事儿,90%的人搞不清
  15. python opencv根据颜色进行目标检测
  16. 搜索引擎使用的一些基本技巧
  17. IHERB上待产包准备指南-妈妈篇
  18. 阿里巴巴区签约重庆,这些合作亮点你不得不知!
  19. photoshopcs6 安装
  20. MATLAB计算气象水文要素年内分配指数

热门文章

  1. spoj4487(splay)
  2. (转)Qt添加windows开机自启动
  3. java不想被gc,Java GC 必知必会
  4. 圈儿里使人泪两行的事儿,千万要注意。
  5. pandas.series.tolist()函数结构及用法
  6. 计算机老是不断重启是什么原因,电脑一直自动重启是什么原因?(盘点电脑老是自动重启的原因!)...
  7. E-day0003:generate
  8. 获取access_token报错errcode: 40125,errmsg: invalid appsecret, view more at http://t.cn/RAEkdV
  9. 路由器DRCOM教程
  10. 宾州汉语句法依存指南 树库(3.0) 中文整理版