1、介绍
移位操作符只可处理整数类型。
- << : 左移位操作符(i<<2),顾名思义,即在将整个字节向左移动n位(自己定义的),字节的低位则会补上n位0.
- :>> : 右移位操作符(i>>2),分两种情况,一种是正数,一种是负数。有符号的字节,第一位表示正负,0代表正数,1代表负数
正数:高位插入n个0,
负数:高位插入n个1; - :>>>: 无符号的右移(i>>>2),无论正负,都将在高位插0
小结:左移位相当于*2的n次方,右移相当于/的n次方2。
2、举例
public static void main(String[] args) {
int i = -1;
System.out.println(Integer.toBinaryString(i));
i>>>=10;
System.out.println(Integer.toBinaryString(i));
i = 15;
System.out.println(Integer.toBinaryString(i));
i>>=1;
System.out.println(Integer.toBinaryString(i));
}
打印结果如下:
11111111111111111111111111111111
1111111111111111111111
1111
111
说明:
Java中使用32bit保存Integer型,64bit保存Long型。对于int型的15,则会省略前面的0,所以打印1111;
3、byte和short类型
- byte :8bit,只占一字节
- short : 16bit,只占两字节
特别说明:对于byte和short类型进行移位时候,会自动将byte和short装换成32bit,再移位。移位完成后会将截断成对应的位数,赋值给原来的类型
public static void main(String[] args) {
byte i = -1;
System.out.println(Integer.toBinaryString(i));
i>>>=10;
System.out.println(Integer.toBinaryString(i));
i = -1;
System.out.println(Integer.toBinaryString(i));
System.out.println(Integer.toBinaryString(i>>>10));
}
####结果如下:
11111111111111111111111111111111
11111111111111111111111111111111
11111111111111111111111111111111
1111111111111111111111