Java位运算
位移操作:(只针对 int类型的数据有效,java中,一个int的长度始终是32位,也就是4个字节,它操作的都是该整数的二进制数).也可作用于以下类型,即 byte,short,char,long(它们都是整数形式)。当为这四种类型时,JVM先把它们转换成int型再进行操作。
1、左移(<<)
m<< n的含义:把整数m表示的二进制数左移n位,高位移出n位都舍弃,低位补0. (此时将会出现正数变成负数的可能),如下实例:
5<<29 :把十进制的数值5左移两位,按如下步骤计算,
- 把5转位16位的二进制机器数:00000000 00000000 00000000 00000101
- 按左移原理,将二进制数左移两位:10100000 00000000 00000000 00000000
- 左移后高位是1,结果显然是负数
m<< n即在数字没有溢出的前提下,对于正数和负数,左移n位都相当于m乘以2的n次方.
2、右移(>>)
m>>n的含义:把整数m表示的二进制数右移n位,m为正数,高位全部补0;m为负数,高位全部补1,实例如下:
-5>>2:把十进制的数值-5右移两位,按如下步骤计算,
- 把-5转位16位的二进制机器数:11111111 11111111 11111111 11111011
- 按右移原理,将二进制数右移两位:11111111 11111111 11111111 11111110
- 右移后结果为-2
**m>>n即相当于m除以2的n次方,得到的为整数时,即为结果。如果结果为小数,此时会出现两种情况:
- 如果m为正数,得到的商会无条件 的舍弃小数位;
- 如果m为负数,舍弃小数部分,然后把整数部分加+1得到位移后的值。
**
3、无符号右移(>>>)
m>>>n:整数m表示的二进制右移n位,不论正负数,高位都补0