Java左移和右移运算符(规则用法案例图解)

Java左移和右移运算符(规则用法案例图解)-mikechen

Java左移和右移运算符在Java开发框架的源码经常涉及,下面就给大家重点详解Java左移和右移运算符的规则用法@mikechen

左移运算符

左移运算符<<使指定值的所有位都左移规定的次数。

1.左移运算符格式

如下所示:

//num指定要移位值value移动的位数
value<<num

如果移动的位数超过了该类型的最大位数,那么编译器会对移动的位数取模。如对int型移动33位,实际上只移动了33%32=1位。

2.左移运算符规则

左移的规则只记住一点:丢弃最高位,0补最低位。

举一个例子:

当左移的运算数是int类型时,每移动1位它的第31位就要被移出并且丢弃;

当左移的运算数是long类型时,每移动1位它的第63位就要被移出并且丢弃;

在数字没有溢出的前提下,对于正数和负数,左移n位就相当于乘以2的n次方。

3.左移运算符用法举例

例如:2<<2

如下图所示:

Java左移和右移运算符(规则用法案例图解)-mikechen

左边(高位端:两个00)溢出的位被丢弃,右边(低位端:两个00)的空位用0补充。

2<<2最终左移的二进制就变成了:

00001000

让后再转换为十进制,结果如下图所示:

Java左移和右移运算符(规则用法案例图解)-mikechen

左移位运算相当于乘以2的N次幂,2<<2,就像2乘以2的2次幂,所以最终的结果就是上图的:8.

 

Java右移运算符

1.右移运算符格式

如下所示:

//num指定要移位值value移动的位数
value>>num

 

2.右移运算符规则

右移的规则只记住一点:符号位不变,左边补上符号位。

右移运算符规则,按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补符号位。

 

3.右移运算符用法举例

还是举例说明:733183670>> 1(右移1位)

如下图所示:

Java左移和右移运算符(规则用法案例图解)-mikechen

将一个二进制数向右移动指定的位数,右边(低位端)溢出的位被丢弃,左边(高位端)的空位端,如果高位端为0,则是正数,空位补0,如果高位为1为负数,空位补1。

最后733183670右移1位后,换算成十进制的值为:366591835,刚好是733183670的1半。

右移一位相当于除2,右移n位相当于除以2的n次方:733183670右移1位就相当于,733183670除以2的1次方,就相当于除2,等于366591835。

 

作者简介

陈睿|mikechen,10年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

👇阅读更多mikechen架构文章👇

阿里架构 |双11秒杀 |分布式架构 |负载均衡 |单点登录 |微服务 |云原生 |高并发 |架构师

以上

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法