位移运算符[duo9]

      Java中的位移运算符,是比较令初学者迷惑的地方,尤其是数学基础不好的。至少当初我是如此。
       位移运算符(Shift operators)用来操作位,仅仅可以用在基本的整数类型上。
       它们分为:
             左移运算符号(<<);
             右移运算符号(>>);
             Java中还有一种特殊的,无正负号的右移运算符(>>>)
      
        (1)左移动运算符:
              会将操作的数向左边移动,移动的位的个数由右操作数指定,左移后,低位会被自动补零(0)。
        (2)右移动运算符:
            反过来,把操作数向右移动,移动的位个数同样由右操作数指定。注意:面对带正负号的数,会采用符号扩展,如果原值是正数,则高位补上0;如果原值是负数,高位补1。
        (3)无正负号的右移运算符(>>>):
              采用0补充,意思就是说,无论是正号还是负号,都在高位补0。

        如果你操作数是比如char,byte,short,位移运算之前,会转型为int,正如前面所说,位移运算符仅仅可以用在类型为int的数值上。

          
例:
    public class URShift{
         public static void main(String[] args){
             int i=-1;
             i>>>=10;
             System.out.println(i); 
        }
    }

java: 4194303

怎样工作:
用二进制表示时最高位用0或1表示正负
0表示正 1表示负(不是仅最高为1 而是所有的高位都是1)

>>  是带符号右移   右移时左边补符号位
>>> 是不带符号右移  右移时左边补零

所以两者在处理 正数时是一样的 左边都补零
但在处理负数时就有区别了 >>补1 >>>补0

所以 -1
1111 1111 1111 1111 1111 1111 1111 1111B
i >>>= 10 后
0000 0000 0011 1111 1111 1111 1111 1111B
= 4194303




  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值