走上不归路的第一步-C

来源:互联网 发布:mac安装virtualbox 编辑:程序博客网 时间:2024/04/19 22:34

交换两变量的值的几种方法


1:引用第三个变量来交换

此代码只是为了大概介绍了下如何引用第三个变量来完成两变量值的交换,具体提示以及输出信息未完成。

主要步骤可以分为:

<1>赋值给两个需要交换值的变量; 

<2>定义第三个变量tmp 用来放置临时交换的值;

    <3>将变量1的值赋给tmp,变量2的值赋给变量1,tmp的值赋给变量1,从而完成交换过 程。


2:不引用第三个变量完成值的交换


此代码段采用了算法思想。

<1>先将两变量的值加起来赋给num1;

<2>将加起来的值减去num2的赋给num2值得出结果其实就是num1的初始值;

                                            <3>讲加起来的值减去上一步中被赋值过的num2得出结果就是num1,完成值得交换。

                                             图式过程如下,num1同理可得   


3:运用异或运算完成数值交换

  




  首先先介绍下异或运算符:^ 在 C 里面是按位异或操作符,在二进制表示情况下,同一位相同的话异或的结果就是 0,不同的话就是 1。但是需要注意:任何一位二进制数同 1 异或都会变成另外一个(0 同 1 异或的结果是 1,1 同 1 异或的结果是 0)任何一位二进制数同 0 异或都保持不变(0 同 0 异或的结果是 0,1 同 0 异或的结果是 1)接下来解释下为何可以通过异或运算符完成此过程。

       假设a = 101(5)

              b = 111(7)

        a ^ b = 010(2)

  现在来解释为何上面三行核心代码可以完成值的交换:

<1> num1 = num1 ^ num2;  //将num1与num2异或的值赋值给num1

<2> num2 = num1 ^ num2;  //此时num1 = num1 ^ num2,所以num2 = num1 ^ num2 ^ num2,故此行其实是将num1的值赋给了num2;

<3> num1 = num1 ^ num2;  //此时的num1值并没有改变,但是num2的值已经变成了num1,所以num1 = num1 ^ num2 ^ num1,也就是将num2的值赋给了num1; 从而完成了两变量的交换


虽然方法还有很多,但是还是推荐使用第一种,程序可读性高,运用范围广。

0 0
原创粉丝点击