Java位移操作符
运算符<<
(左移),>>
(右移)和 >>>
(无符号右移)称为移位运算符。移位运算符的左侧操作数是要移位的值; 右侧操作数指定移位距离。下面是语法描述:
1 | ShiftExpression: |
n << s
的意思是n左移s个bit位,这相当于 ,注意溢出。n >> s
的意思是n带符号位右移s个bit位,若左操作数是正数,则高位补“0”,若左操作数是负数,则高位补“1”,这相当于 。n >>>s
的意思是不带符号右移,无论左操作数是正数还是负数,在高位都补“0”。- 如果n是正数,那么结果等同于
n >> s
- 如果n是负数,且类型是int,那么结果等同于
(n >> s) + (2 << ~s)
- 如果n是负数,且类型是long,那么结果等同
(n >> s) + (2L << ~s)
- 如果n是正数,那么结果等同于
按位补码运算符: ~
shift表达式的类型是左侧操作数的提升类型。
- 如果左手操作数的提升类型是int,则只使用右手操作数的五个最低位作为移位距离.
- 如果左侧操作数的提升类型是long,则只使用右侧操作数的六个最低位作为移位距离.
1 | 5 >> 32 == 5 |