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
如下图所示:
左边(高位端:两个00)溢出的位被丢弃,右边(低位端:两个00)的空位用0补充。
2<<2最终左移的二进制就变成了:
00001000
让后再转换为十进制,结果如下图所示:
左移位运算相当于乘以2的N次幂,2<<2,就像2乘以2的2次幂,所以最终的结果就是上图的:8.
Java右移运算符
1.右移运算符格式
如下所示:
//num指定要移位值value移动的位数 value>>num
2.右移运算符规则
右移的规则只记住一点:符号位不变,左边补上符号位。
右移运算符规则,按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补符号位。
3.右移运算符用法举例
还是举例说明:733183670>> 1(右移1位)
如下图所示:
将一个二进制数向右移动指定的位数,右边(低位端)溢出的位被丢弃,左边(高位端)的空位端,如果高位端为0,则是正数,空位补0,如果高位为1为负数,空位补1。
最后733183670右移1位后,换算成十进制的值为:366591835,刚好是733183670的1半。
右移一位相当于除2,右移n位相当于除以2的n次方:733183670右移1位就相当于,733183670除以2的1次方,就相当于除2,等于366591835。