java中的位运算和两个数大小互换

       首先了解位运算,要知道java中默认的整数是int型的,占4个byte,是以32位的二进制存在。

        举个例子:

        十进制                         二进制

          6                       0000-0000 0000-0000 0000-0000 0000- 0110

   那么接下来进行位运算:

       位运算一般有>>,<<,>>>,

>>表示右移,如果该数为正,则高位补0,若为负数,则高位补1;

>>>表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0。

<< 表示左移,移动之后,右边的低位用0补空位。

    6>>2

      运算过程就是:将6的二进制表现形式,向右移2位,空出来的高位用0补上,如果是负数,就补1

     |0000-0000 0000-0000 0000-0000 0000- 0110|

    -->       

     00|00-0000 0000-0000 0000-0000 0000- 0001|10

  这样就得出了6>>2的结果00-0000 0000-0000 0000-0000 0000- 0001:转为十进制就等于1

同理

  6<<2

     |0000-0000 0000-0000 0000-0000 0000- 0110|

-->

 00|00-0000 0000-0000 0000-0000 0000- 011000|

  同样得出结果00-0000 0000-0000 0000-0000 0000- 011000 ,转为十进制就等于24


从这里我们可以看出来,6<<2运算就是6/(2^2)=1,6>>2运算就是6*(2^2)=24;

所以位运算用于对2的次幂,

注意:>>>,>>区别

   都是右移运算,但是>>有符号位,在补位的时候正数补0,负数补1,而>>>都是用0补位,这一点特别注意!



 同时在这里写一个小方法:

          我们都知道java中两个数a,b互换,需要借助第三方变量作为临时变量来存储数据,再进行互换

在这里我提供两个不需要临时变量的方法,自己娱乐使用,仅供大家参考

           

        int a=3,b=5;
       a=a+b;
       b=a-b;
       a=a-b;
 这种方法还有一个小问题:
                   a+b,可能会超出int型的最大范围,造成进度丢失





 
    int a=3,b=5;
    a=a^b;
    b=a^b;
    a=a^b;



 下面一种使用的是^运算,异或运算,一个数异或另一个数两次就得到它本身,即:

                   3^5^5=3;

所以这两种方式都可以完成两数互换大小。



                        这里是菜鸟的自我理解和随笔,若有理解错误,往各位大牛不吝赐教。

                                    

                                                   




                                    

   


  



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值