Java 变量交换

2018-03-09  本文已影响0人  久战王

一:先声明temp为临时变量,先把a装进temp,temp=a,那么此时temp里面的值已经不存在了,但是不重要,本身temp本身的值没有意义。

然后再a=b,那b的值装进a,此时a已经等于b值,a的值不存在,但是不重要,此时a值已经存在temp里了

再然后,b=temp,那么ab两个变量在此时就转换完成了。

总结:没有什么好处坏处,属于标准用法。

*代码如下

···

        temp=a;

        a=b;

        b=temp;

···

二:方法二不采用临时变量,直接在ab之间转换,弊端在于后期写程序如果数字过大超出int本身32位的值,ab相加容易爆。

*代码如下

···

        int a=4;

        int b=7;

        b=a+b;        // a=4  b=11

        a=b-a;        // a=7  b=11

        b=b-a;        // a=7  b=4

···

三:第三种转换形式运用到了位运算

解读:自己异或自己 = 0            任何一个数跟 0 异或是自身,所以 a ^ b ^ a 等于 b,a 出现两个进行抵消,所以得出结果为 b。

举例:自己异或自己 = 0 举例:自身异或 0 等于自身

实例操作:

int  a = 4

int  b = 7

我们先声明,a = 4        b = 7

a = a ^ b;        那么a就等于 4 ^ 7        得出结果a = 4 ^ 7(在这个表达式中a的值本身我们是不知道的,所以当前a = 4 ^ 7)

b = a ^ b;         那么前面本身a是等于4 ^ 7的,现在来看b的结果是b = 4 ^ 7 ^ 7   (解析,4 ^ 7是第一步得出来的结果, ^ 7是b当前本身的值,前面知识点提到异或概念就是两两抵消取最后奇数的值,所以当前b = 4)

a = a ^ b;     现在来看,这句表达式当中的,a和b的值已经不再是ab最先本身的值了,通过前面第一步和第二部的异或位运算 a = a ^ b当中的(a ^ b 这两个值是已经变更了最先的本值,现在这里面的        a=4 ^ 7,b = 4 )    解析:a = 4 ^ 7 ^ 4 ^ 7 ^ 7    通过运用异或两两抵消最后得出值是7,(4 7 4 7 7将两个7抵消,两个4抵消,最后还剩下一个7这就是结果),所以运行结果a = 7   b = 4,在此完成了交换。

*代码如下

···

        int  a = 4;

        int  b = 7;

        a = a ^ b;        //a = 4 ^ 7

        b = a ^ b;        //b = 4 ^ 7 ^ 7

        a = a ^ b;        //a = 4 ^ 7 ^ 4 ^ 7 ^ 7

···

上一篇 下一篇

猜你喜欢

热点阅读