java移位操作符号
java中三种移位操作:
- << : 向左移位,低位补零
- >> : 有符号右移:符号位为0时,高位补零;符号位为1时,高位补1
- >>> : 无符号右移:不管符号位是否为1,高位都补零;
java支持移位操作数据类型:int,long两种;char,byte,short 移位操作时,先转换为对应的int,再移位;
PS:
- java中负数采用补码表示
- int 移位只移动右侧操作数的低五位(0-31),防止无效移位
- long 移位只移动右侧操作数的低六位(0-63)
- >>> 移动 char,byte,short 表示的负数时,"零扩展"没有发生,得不到正确的值;例如:byte b=-1; b>>>=10;得到的值仍然为-1;
public class App
{
public static void main( String[] args )
{
int i = -1;
i >>>= 10;
System.out.println(i);
long l = -1;
l >>>= 10;
System.out.println(l);
short s = -1;
s >>>= 10;
System.out.println(s);
byte b = -1;
b >>>= 10;
System.out.println(b);
//result:
// 4194303
// 18014398509481983
// -1
// -1
}
}