码迷,mamicode.com
首页 > 编程语言 > 详细

Java基础中Int类型变量值互换的几种方法

时间:2018-11-07 14:04:07      阅读:315      评论:0      收藏:0      [点我收藏+]

标签:方案   没有   存储空间   基础   str   运行时   通过   异或运算   实现   

    在很多时候,我们会使用到将两个整型变量值进行互换,比如冒泡排序,通过判断来将数组变量的值逐步交换,那么怎么交换值才能最有效最节省空间呢?

  首先,我们会想到的,用一个零时变量来做中间的过度存储空间,这是很容易想到的方法,实现如下:

      int i = 10;  //声明变量 i,并给 i 赋值为10

      int j = 20;  //声明变量 j,并给 j 赋值为20

      int temp;  //声明零时变量temp

      那么,我们要将变量 i 的值赋给变量 j ,就得通过零时变量temp存储其中一个变量的值:

      temp = i ;   //将变量 i 值暂存于零时变量temp中,即temp = 10;

      i = j ;    //将变量 j 的值赋值给变量 i ,即 i = 20;

      j = temp ;    //将零时变量存放的值赋值给变量 j ,即 j = 10;

      这样,我们就完成了最简单的值互换。

  其次,既然我们需要互换的是int类型的变量,那么就可以进行数值运算及加减乘除来实现变量值的互换。

          int i = 10;  //声明变量 i,并给 i 赋值为10

      int j = 20;  //声明变量 j,并给 j 赋值为20

      i = i + j;  //将 i + j(10+20) 的和赋值给变量 i ,赋值后变量 i 的值为 30

      j = i - j;  //将 i - j(30-20) 的差赋值给变量 j ,赋值后变量 j 的值为 10

      i = i - j;  //再运算一次,将 i - j(30 - 10)的差赋值给变量 i ,赋值后变量 i 的值为 20

      这样,我们也完成了两个变量值的互换,这样的好处是不需要第三个变量参与,节省了运行内存。

  最后,我们可以通过位运算中的异或运算(^)实现变量值的交换,异或运算是位运算,其规则是相同为0,不同为1,即1^0或0^1的取值为1,1^1或0^0的取值为0,实现如下:

         int i = 10;  //声明变量 i,并给 i 赋值为10

         int j = 20;  //声明变量 j,并给 j 赋值为20

      //其中变量 i 的值为10,其二进制编码为:0000 1010

      //其中变量 j 的值为20,其二进制编码为:0001 0100

      i = i ^ j ;  //即为 10 ^ 20 ,根据 ^ 的运算规则可知,其结果是 0001 1110 ,转换成十进制为:24 + 23 + 2+ 2 = 30 ,

            //并将30赋值给变量 i ,即 i = 30

      j = i ^ j ;  //即为 30 ^ 20,其结果是 0000 1010,转换成十进制为10,并将结果赋值给变量 j ,即 j = 10

      i = i ^ j ;  //即为 30 ^ 10,其结果是 0001 0100,转换成十进制为20,并将结果赋值给变量 i ,即 i = 20 

      这种方式不需要使用零时变量,且是通过位运算,增加了其运算速度。

  总结,在完成代码时,我们要在解决问题的同时思考更加高效率的解决方案,当然,我们也要明白不同方案的优点和缺点,虽然有些方案可以提高运行效率,比如上述的第三种方案,但是他没有第一种方案直观,并且效率也没有说完全高太多,只要在可接受的运行时间和空间内解决问题,那么我们完全可以使用第一种更为简单和直观的方式解决问题。 

Java基础中Int类型变量值互换的几种方法

标签:方案   没有   存储空间   基础   str   运行时   通过   异或运算   实现   

原文地址:https://www.cnblogs.com/stupidxixi/p/9922031.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!