移位时,首先搞清楚正数的原码、补码,负数的原码、补码以及在计算机中正数的二进制表示为原码还是补码?
可先看这篇 : 原码,反码,补码的理解-Java
>>与>>>都属于位运算符,两者区别为 : 右移时,所填充的高位不同.
>> :右移运算符1
含义:将二进制位进行右移,用符号位填充高位
符号位:正数符号位为0; 负数符号位为1.
>>>:无符号右移运算符
含义:将二进制位进行右移,用0填充高位
<<:左移运算符2
含义:将二进制位进行左移
Note:没有<<<运算符
移位运算符的应用
请看该文:计算二进制中1的个数-Java
[参考文献]
该文内容大量摘自:Java核心技术卷一,原书第九版
1.对移位运算符右侧的参数需要进行模32的运算(除非左边的操作数是long类型,在这种情况下需要对右侧操作符模64).例如:1<<35与1<<3或8是相同的. 2. 右移一位相当于将该数除以2.
- ↩︎
- 左移一位相当于将该数乘以2. ↩︎