`
argel_lj
  • 浏览: 363700 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

交换两个值,不用临时变量(C位运算)

 
阅读更多

    通常我们交换两个值,都是用一个临时的变量temp,拿交换a,b的值为例,通常的做法是:temp = a;a = b;b = temp;不过利用位运算,真的是方便很多:
        假如 a = 3,b = 4。想将a和b的值互换,可以用一下赋值语句实现:

        a = a ^ b;
        b = b ^ a;
        a = a ^ b;

        下面用竖式进行简单说明:(10进制化为二进制)
    
        a = 011
(^)    b = 100
则    a = 111(a ^ b的结果赋值给a,a已变成了7)
(^)    b = 100
则    b = 011(b^a的结果赋给b,b已经变成了3)
(^)    a = 111
则    a = 100(a^b的结果赋给a,a已经变成了4)    

        从上面的竖式可以清楚的看到利用异或运算实现两个值交换的基本过程。
       
        下面从深层次剖析一下:

        1.对于开始的两个赋值语句,a = a ^ b,b = b ^ a,相当于b = b ^ (a ^ b) = a  ^ b ^ b,而b ^ b 显然等于0。因此b = a ^ 0,显然结果为a。
        2. 同理可以分析第三个赋值语句,a = a ^ b = (a ^ b) ^ a = b

        注:1.^ 即”异或“运算符。它的意思是判断两个相应的位值是否为”异“,为”异"(值不同)就取真(1);否则为假(0)。
                2.^运算符的特点是与0异或,保持原值;与本身异或,结果为0。

 

另外,还可以通过加减的方式来交换两个值,如下:

a = a + b; 
b = a - b; 
a = a - b; 

分享到:
评论

相关推荐

    易语言交换变量值

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

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

    通常情况下,交换两个变量的值需要第三个临时变量作为中介。但是,通过巧妙利用位异或运算符,我们可以实现不使用任何额外变量来交换两个数的值。 具体步骤如下: 1. 使用位异或运算符计算两个变量的异或值,并将...

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

    在标题提到的"BAT批处理脚本-加密解密-交换两个变量的值而不使用临时变量.zip"中,主要涉及到以下几个知识点: 1. **批处理脚本基础**: - BAT脚本是一种基于DOS命令的文本文件,扩展名为.bat,里面包含了各种DOS...

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

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

    C语言 位运算PPT课件.pptx

    按位异或运算符可以用来使某些特定位翻转,也可以用来交换两个变量的值不用中间变量。 按位求反运算符(~)是C语言中的一种位逻辑运算符,它可以对一个二进制数进行按位求反操作。按位求反运算符的规则是:~0=1,~1...

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

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

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

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

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

    本文主要介绍了四种不使用第三个变量来交换两个变量值的方法,适用于C/C++编程语言。 1. **算术运算**: 这种方法基于算术运算,例如加减法或乘除法。通过巧妙地使用算术运算,可以在不借助额外变量的情况下完成...

    C语言程序设计位运算PPT课件.pptx

    * 交换两个值,不用临时变量。例如:a=3,b=4,将a和b的值互换,可以用以下赋值语句实现:a=a^b;b=b^a;a=a^b; 本PPT课件详细介绍了C语言程序设计中的位运算,包括二进制表示、按位与、按位或、异或等操作,并详细...

    C语言位运算总结和运用

    - 值交换:两个变量的值可以使用异或运算互相交换,而无需额外的存储空间。 4. **取反(~)**: 一元运算符,将每个位反转,1变为0,0变为1。常用于创建位掩码。 5. **左移()**: 向左移动位,右边填充0。左移n位相当...

    ASCII码 C语言位运算优先级.txt

    根据提供的文件信息,我们可以归纳出两个主要的知识点:ASCII码和C语言中的位运算优先级。下面将分别对这两个主题进行详细的阐述。 ### ASCII码 ASCII(American Standard Code for Information Interchange,美国...

    C语言在不创建变量的情况下,交换两个变量的数据(面试题)

    在C语言中,交换两个变量的数据是一个常见的编程问题,尤其在面试中经常出现。这个问题的挑战在于如何在不创建额外变量的情况下完成交换。通常,我们使用一个临时变量来存储其中一个变量的值,然后将另一个变量的值...

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

    在编程中,交换两个变量的值是一个常见的任务,但有时我们可能希望避免使用第三个临时变量。本文探讨了几种不依赖额外变量实现交换的方法,主要针对C/C++编程语言。 1. **算术运算**: 算术运算方法利用加减法或乘...

    两个数据的交换

    在计算机编程领域,数据交换(或称值交换)是指将两个变量中的值进行互换的过程。这是编程中最基本的操作之一,在多种场景下都有应用,比如排序算法、数组元素位置调整等。 ### 常用的数据交换算法 #### 经典算法...

    Delphi交换两个变量值的方法(含示例)

    这是最直观也最常用的方法,通过一个临时变量作为中介来交换两个变量的值。 ```delphi var A, B: Integer; Temp: Integer; begin A := 5; B := 10; Temp := A; // 将A的值暂存到Temp A := B; // A现在等于B...

    用C#语言实现两个数的交换

    在C#编程中,交换两个变量的值是一个常见的操作,比如在数组排序、数学计算或者数据处理场景。这里我们将详细探讨如何用C#语言实现这个功能。首先,我们需要理解基本的赋值运算符以及理解临时变量的作用。 1. **...

    C语言位运算的基础知识.pdf

    4. **交换两个变量的值**:异或运算也可以用来在不使用临时变量的情况下交换两个变量的值。例如,`int a = 3, b = 4`,要交换`a`和`b`,可以执行以下步骤: - `a = a ^ b;` // a现在是7(3 ^ 4) - `b = a ^ b;` /...

    C中的位运算,讲的很详细

    - **交换变量值:** 可以通过两次按位异或运算来实现两个变量之间的值交换,而无需使用额外的临时变量。 #### 六、按位取反(~) 按位取反运算符`~`是一个单目运算符,用于对一个数的二进制表示中的每个比特进行取反...

    ACM位运算技巧

    - 不引入第三变量,交换两个变量的值:通过连续的`^`操作,可以在没有额外变量的情况下实现两数交换。 #### 移位运算 - **右移(>>)与无符号右移(>>>)**:`>>`右移时,对于正数,左边移出的空位补0;对于负数,...

    c语言 重要的位运算

    - **交换两个变量的值**:通过三次按位异或操作,可以在没有临时变量的情况下交换两个变量的值。 #### 按位取反(~)操作符 按位取反操作符将每个位的值反转,即1变0,0变1。它可以用于创建掩码,以便在后续的按位与...

Global site tag (gtag.js) - Google Analytics