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

java移位运算

时间:2018-05-03 22:06:39      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:情况   算法   使用   padding   add   负数   位运算   div   处理   

     移位运算符操作的对象就是二进制的位,可以单独用移位运算符来处理int型整数。

 运算符       含义       例子      
<< 左移运算符,将运算符左边的对象向左移动运算符右边指定的位数(在低位补0) x<<3
>> "有符号"右移运算 符,将运算符左边的对象向右移动运算符右边指定的位数。使用符号扩展机制,也就是说,如果值为正,则在高位补0,如果值为负,则在高位补1. x>>3
>>> "无符号"右移运算 符,将运算符左边的对象向右移动运算符右边指定的位数。采用0扩展机制,也就是说,无论值的正负,都在高位补0. x>>>3

  在java中,byte,short,long 在移位运算时,先将各自类型转换成int,转换成二进制计算后,在转换成对应的类型。

  如: 3<<3 = 0000 0011 * 2^3 = 0001 1000 = 24  ,即 向左移动三位,低位补0

     24 >> 3 = 0001 1000 / 2^3  = 0000 0011 = 3, 即 向右移动三位,高位补0  

    x<<y 相当于 x*2;x>>y相当于x/2y

      从计算速度上讲,移位运算要比算术运算快。
      如果x是负数,那么x>>>3没有什么算术意义,只有逻辑意义。

 

  在 java 中,int 类型的数据长度为 32 位,如果将 int 类型左移或者右移大于或等于 32 位时,并不会像预计的那样将数据全部填充为1或0。java 的处理方式是:当刚好为数据长度的整数倍时,即32、64······,数据保持原来不变;其他情况下移动除以 32 余数的长度。同理 long 类型数据以 64 为变化基准。 
在实际应用中,需要特别注意这点,当然也可以巧用此特性实现一些特殊算法的设计。

java移位运算

标签:情况   算法   使用   padding   add   负数   位运算   div   处理   

原文地址:https://www.cnblogs.com/ztnn/p/8987440.html

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