当要交换两个数的值时,通常的做法是定义一个临时变量,然后再进行交换。那么能不能不用临时变量而交换两个数的值呢?可以的!C语言提供的异或运算就可以实现这样的操作。

异或运算符^也称XOR运算符,它的规则是若参加运算的两个二进位同号,则结果为0(假);异号为1(真)。即0 ^ 0 = 0, 0 ^ 1 = 1, 1 ^ 0 = 1, 1 ^ 1 = 0。

例:

#include

int main(int argc, char *argv[])

{

int a = 2, b = 6;

a = a ^ b;

b = b ^ a;

a = a ^ b;

printf("a = %d b = %d\n", a, b);

return 0;

}

结果如下: a = 6 b = 2

分析:前两个赋值语句:“a = a ^ b;”和“b = b ^ a;”相当于b = b ^ (a ^ b),而b ^ a ^ b等于a ^ b ^ b。b ^ b的结果为0,因为同一个数与相向相^,结果必为0。因此b的值等于a ^ 0,即a,其值为2。

再执行第三个赋值语句:“a = a ^ b”。由于a的值等于(a ^ b),b的值等于(b ^ a ^ b),因此,相当于a = a ^ b ^ b ^ a ^ b,即a的值等于a ^ a ^ b ^ b ^ b,等于b。

另外两种方法:

方法一:

void swap(int *p, int *q)

{

*p = *p + *q;

*q = *p - *q;

*p = *p - *q;

}

方法二:

void swap(int *p, int *q)

{

*p = *p + *q - (*q = *p);

}

原理为算术运算符的结合顺序为自左至右。

注:可以把异或的三条语句压缩为一条:a ^= b ^= a ^= b;

要交换三个变量的值,用下面变量会报错:c = a + c - (a = b, b = c);

下面来分析一下,先看一个示例程序,如下:

#include

int main(int argc, char *argv[])

{

int a = 1;

int b = 2;

int c = 3;

c = a + c - (a = b, b = c);

printf("a = %d\n", a);

printf("b = %d\n", b);

printf("c = %d\n", c);

return 0;

}

编译运行,结果如下:a = 2 b = 3 c = 2

可见,最初目标中的c = 1部分没能实现。于是分析原因:

c语言临时变量交换数值,不用临时变量交换两个数的值(C实现)相关推荐

  1. C语言异或交换两个数的原理解析-大厂面试题:不使用第三变量交换两个数的值

    常用操作交换两个数的值 常用的交换两个数值的方法一般是采用第三个变量,这种方法简单易懂,用代码举例 int main() {//交换两个整形变量int a = 3;int b = 5;int c = ...

  2. 【java】java 如何不使用第三个变量来交换两个数的值

    文章目录 1.概述 2.方案 2.1 算术运算 2.2 位运算 1.概述 今天是一个悲伤的一天,我的悲伤逆流成河.非常非常的悲伤.主要是有这个一个面试题.如何不使用第三个变量来交换两个数的值. 考官说 ...

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

    交换两个数的值是一件非常简单的任务,如果交换a与b,我们一般这样做: tmp = a; a = b; b = tmp; 如果不用中间变量tmp,有以下两种方法: 方法1: a=a+b; b=a-b; ...

  4. 交换数字(不用临时变量)

    编写一个函数,不用临时变量,直接交换numbers = [a, b]中a与b的值. 示例: 输入: numbers = [1,2] 输出: [2,1] 示例代码: class Solution(obj ...

  5. C语言试题七十三之请编写函数求两个数的最大公约数

    1. 题目 编写函数:求两个数的最大公约数. 如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数.几个自然数公有的约数,叫做这几个自然数的公约数.公约数中最大的一个公约数,称为这几个自 ...

  6. c语言用迭代法求最大公约数,用迭代法求两个数的最大公约数和最小公倍数

    c语言论文 用迭代法求两个数的最大公约数和最小公倍数 化工09110605 摘要:迭代法是一种循环控制语句和循环结构程序的设计方法.在计算机解决问 题的时候,总希望从复杂的问题中找到规律,并归结为简单 ...

  7. java 交换两个数的值(临时变量,加减,异或)

    临时变量 开发中一般使用此方式 加减 第二种写法: //3.使用加减d1=d1+d2;d2=d1-d2;d1=d1-d2;System.out.println("d1="+d1+& ...

  8. C语言交换两个数的值与形参与实参理解

    C Simple Swap Program – Assignments 通过赋值来实现交换变量 vi swap_simple0.c #include <stdio.h>int main() ...

  9. C语言使用函数交换两个数的值

    代码分析 下面先举两个常见的错误例子 例一 #include <stdio.h>void change(int a, int b);int main() {int a = 1;int b ...

  10. 基于XGBOOST模型预测货物运输耗时 - Part 2 通过方差分析了解文本型变量与数值型目标变量的关系

    在分析数据之前,我们需要剔除异常值的影响,也就是在某个分组情况下,标准差过大(标准差越大,证明情况越不稳定),如果标准差比较小,就算是最小值和最大值差的比较大,我也认为他是一个比较平稳的波动. 方差分 ...

最新文章

  1. GROMACS运行参数整理(二)
  2. 零基础入门学习Python(6)-常用操作符
  3. 蒸汽机器人布里茨天赋_LoL蒸汽机器人符文天赋_S10机器人辅助出装
  4. 初一七年级计算机信息全册教案,初一信息技术教案全一册
  5. 高并发之API接口,分布式,防刷限流,如何做?
  6. python123自定义幂函数_python基础之函数
  7. CentOS 7使用yum安装MYSQL
  8. hello ,test livewriter
  9. Redis与Mysql双写一致性方案解析
  10. 浮动元素引起的问题和解决办法
  11. python基础词云制作——中国地图
  12. 两平面直角坐标系之间的相互转换
  13. SSRF利用 Gopher |Gopher攻击mysql及内网
  14. excel自动求和_如何在excel表格中求和 excel求和怎么操作
  15. 客户案例:Coremail安全海外中继保障德赛集团跨境通邮安全
  16. [presto(trino)]多种日期写法
  17. 字节跳动二面:你能说说“抖音直播”怎么测试么?
  18. excel股票今日走势计算机,怎样用excel 实时读取 股票日线数据
  19. 蓝牙BQB认证原因及流程
  20. 营销玩法|世界杯期间产品如何提高互动性?

热门文章

  1. 一些有用的收藏201808
  2. JAVA深入研究——Method的Invoke方法(转)
  3. Win7 开启远程桌面
  4. 网页小工具(学习中国象棋)
  5. List of X$ Tables and how the names are derived
  6. wxcharts.js结合java后台在小程序中的使用(柱状图,其它同理)
  7. eclipse python java_如何使用Eclipse使用Python导入Java类?
  8. python名称空间_一篇文章搞懂Python的类与对象名称空间
  9. Django中使用MySQL
  10. PHP数据处理:合并数据、详情数据