`
tuhaitao
  • 浏览: 379272 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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

阅读更多

这个算法是由布尔代数的而来, 在布尔代数中 有几个基本的运算,

 

与、或、非、异或  ,分别对应C语言中的 &、|、~、^运算符号

 

其中运算的规则是:

 

与:

 

&     0     1

-------------

 

0     0     0

1     0     1

 

或:

 

|      0     1

-------------

 

0     0     1

1     1     1

 

非:

 

 

~     

---------

 

0     1    

1     0    

 

异或:

 

 

^     0     1

-------------

 

0    0     1

1    1     0

 

 

在布尔代数中,单个位的运算等同于该位上相同方向向量的运算,由异或的规则,可以推导到出规则

 

a  ^ a = 0

 

根据这个原则,我们可以设计出不用中间变量,交换两个变量的算法:

 

#include <stdio.h>

void change(int* a, int* b) {
    *b = *a ^ *b; 
    *a = *a ^ *b; 
    *b = *a ^ *b; 
}

int main() {
    int x = 8;
    int y = 9;
    printf("before change x=%d, y=%d\n", x, y); 
    change(&x, &y);
    printf("after     change x=%d, y=%d\n", x, y); 
}

 

通过这个算法可以节约一个栈变量的开销.

 

 

 

 

分享到:
评论

相关推荐

    示例代码:不经过中间变量交换两个数

    - C语言中实现不使用中间变量交换两个数的具体步骤 - 代码逻辑分析及注意事项 #### 位运算符的概念与应用 位运算符是在计算机科学中用于对二进制位进行操作的一类运算符。常见的位运算符包括按位与(`&`)、按位或...

    02交换两个变量的值

    在编程中,当需要交换两个变量的值时,最常用的方法之一就是引入一个额外的辅助变量。本例中,我们用`z`作为辅助变量来完成这个任务。 1. **第一步**:将`x`的值保存到`z`中。 ```vb z = x ``` 2. **第二步**...

    Java不使用中间变量交换两个数

    在编程中,交换两个数值是常见的操作,但不使用中间变量进行交换可能需要一些巧妙的技巧。本文将探讨如何在Java中实现这一目标,主要基于数的中和原理,即通过特定的运算使得两个数相互抵消,从而达到交换的目的。 ...

    不用第三方变量交换两数的值

    假设我们要交换两个变量a和b的值,可以采用以下方法: 1. **异或操作**:异或运算符(^)具有交换性质。当一个数与自身进行异或操作时,结果为0;两个不同的数异或会得到它们的异或结果。因此,我们可以这样交换a和...

    易语言交换变量值

    在易语言中,“交换变量值”是一个常见的操作,用于在两个变量之间互换它们的存储值。这个操作在很多算法和程序逻辑中都有应用,例如排序、数据处理等。 在易语言中,交换变量值有多种方式,可以使用临时变量,也...

    不使用中间变量,交换int型的 a, b两个变量的值。

    总结来说,不使用中间变量交换两个变量的值有多种方法,包括位运算、算术运算、数组存储和对象属性。不同的方法适用于不同的场景,位运算和算术运算通常更快,但需要考虑溢出和数据类型限制;数组存储和对象属性方法...

    不要采用异或来交换两个变量

    在编程领域,尤其是在学习基本算法和数据结构的过程中,我们经常遇到如何交换两个变量值的问题。通常,教科书中会介绍几种方法,其中一种就是利用异或(XOR)操作来实现变量交换。然而,这种做法是否真的有效?本文...

    一种不需要中间变量交换两个变量内容的方法

    标题中的“一种不需要中间变量交换两个变量内容的方法”是指在编程中实现两个变量值互换的一种技巧,通常在C语言或其他编程语言中,我们会使用一个额外的中间变量来完成这个任务。然而,描述中提到的朋友分享的方法...

    用异或来交换两个变量能提高速度是错误的

    其中一个经常被提及的例子就是利用异或运算来交换两个变量的值。这种方法在某些情况下可能会导致代码难以理解和维护,并且在性能方面并不一定具有优势。本文将深入探讨这一主题,包括为什么这种方法在现代计算环境中...

    PHP不用第三变量交换2个变量的值的解决方法

    在编程过程中,经常会遇到需要交换两个变量的值的情况。通常情况下,人们会借助一个临时的第三变量来完成这一操作。但在某些特定场景,比如面试题目的限制或者是为了避免创建额外的临时变量,我们需要寻找不使用第三...

    python交换两个变量的值方法

    ### Python交换两个变量的值方法 在Python编程中,交换两个变量的值是一个常见的操作,尤其是在需要进行排序、数据处理等场景中。本文将详细介绍如何在Python中交换两个变量的值,并探讨其背后的原理。 #### 一、...

    变量交换的几种常见方法

    例如,在C++中,可以通过修改指针所指向的内存地址来间接交换两个变量的值。这种方法通常在内存管理和低级编程中使用,但需要小心处理,避免内存访问错误和溢出问题。 #### 结论 变量交换的方法多种多样,每种方法...

    JavaScript两个变量交换值的实现方法

    在JavaScript中,进行两个变量间值的交换是一项基本的操作,它在编程中经常出现,尤其是在处理数据交换、算法设计、数组排序等功能时。传统的变量值交换方法通常需要借助一个临时变量来完成。然而,存在多种不使用...

    Python3之不使用第三方变量,实现交换两个变量的值

    method 1: a,b = b,a method 2: a = a+b b = a-b ... 您可能感兴趣的文章:python交换两个变量的值方法对Python中实现两个数的值交换的集中方法详解对变量赋值的理解–Pyton中让两个值互换的实现方法

    交换两个变量的值,不使用第三个变量的方法及实现.pdf

    在编程中,交换两个变量的值是一个常见的操作。标准方法是使用一个临时变量来辅助交换,但有时我们可能希望避免使用额外的存储空间。本文主要介绍了四种不使用第三个变量来交换两个变量值的方法,适用于C/C++编程...

    BAT批处理脚本-加密解密-交换两个变量的值而不使用临时变量.zip

    总的来说,这个压缩包提供了一个关于批处理脚本中如何不使用临时变量交换两个变量值的示例,同时提醒了我们批处理脚本在加密解密、文件操作和自动化方面的应用。学习和理解这些概念,可以帮助我们更好地利用批处理脚...

    nihao.rar_代码 变量交换

    标题中的“nihao.rar_代码 变量交换”表明这是一个关于如何在程序中交换两个变量值的示例代码。下面我们将深入探讨变量交换的不同方法及其原理。 首先,我们要理解变量在编程中的基本概念。变量是存储数据的容器,...

    Python 函数的返回值-03-交换两个变量的值

    Python也可用于可定制化软件中的扩展程序语言。Python丰富的标准库,提供了适用于各个主要系统平台的源码或机器码。 Python还被语言流行指数的编译器Tiobe将它被评为最受欢迎的编程语言,20多年来首次将Python置于...

Global site tag (gtag.js) - Google Analytics