Java位移操作符

Java位移操作符

运算符<<(左移),>>(右移)和 >>>(无符号右移)称为移位运算符。移位运算符的左侧操作数是要移位的值; 右侧操作数指定移位距离。下面是语法描述:

1
2
3
4
5
ShiftExpression:
AdditiveExpression
ShiftExpression << AdditiveExpression
ShiftExpression >> AdditiveExpression
ShiftExpression >>> AdditiveExpression
  • n << s的意思是n左移s个bit位,这相当于 n2sn*2^s,注意溢出。
  • n >> s的意思是n带符号位右移s个bit位,若左操作数是正数,则高位补“0”,若左操作数是负数,则高位补“1”,这相当于 n/2sn/2^s
  • n >>>s的意思是不带符号右移,无论左操作数是正数还是负数,在高位都补“0”。
    • 如果n是正数,那么结果等同于n >> s
    • 如果n是负数,且类型是int,那么结果等同于(n >> s) + (2 << ~s)
    • 如果n是负数,且类型是long,那么结果等同(n >> s) + (2L << ~s)

按位补码运算符: ~

shift表达式的类型是左侧操作数的提升类型。

  • 如果左手操作数的提升类型是int,则只使用右手操作数的五个最低位作为移位距离.
  • 如果左侧操作数的提升类型是long,则只使用右侧操作数的六个最低位作为移位距离.
1
2
3
5 >> 32 == 5
// 5 >> 0
// 32 100000 后5位是 00000

参考