3.6.5 移位运算符

移位运算符也针对二进制的“位”,它主要包括左移位运算符(<<)、右移位运算符(>>>)、带符号的右移位运算符(>>)。

1.左移运算符

左移运算符用“<<”表示,是将运算符左边的对象,向左移动运算符右边指定的位数,并且在低位补0。

【实例3.32】其实,向左移n位,就相当于乘上2的n次方,例如下面的例子。


01 public class data17

02 {

03 public static void main(String[]args)

04 {

05 int a=2;

06 int b=2;

07 System.out.println("a移位的结果是:"+(a<<b));

08 }

09 }


【代码说明】首先从本质上来分析,2的二进制是00000010,它向左移动2位,就变成了00001000,即8。如果从另一个角度来分析,它向左移动2位,其实就是乘上2的2次方,结果还是8。

【运行效果】


a移位的结果是:8


2.右移运算符

【实例3.33】右移运算符用符号“>>>”表示,是将运算符左边的对象向右移动运算符右边指定的位数,并且在高位补0,其实右移n位,就相当于除上2的n次方。


01 public class data18

02 {

03 public static void main(String[]args)

04 {

05 int a=16;

06 int b=2;

07 System.out.println("a移位的结果是:"+(a>>>b));

08 }

09 }


【代码说明】从本质上来分析,16的二进制是00010000,它向右移动2位,就变成了00000100,即4。如果从另一个角度来分析,它向右移动2位,其实就是除以2的2次方,结果还是4。

【运行效果】


a移位的结果是:4


3.带符号的右移运算符

带符号的右移运算符用符号“>>”表示,是将运算符左边的运算对象,向右移动运算符右边指定的位数。

【实例3.34】如果是正数,在高位补零,如果是负数,则在高位补1,先看下面一个简单的例子。


01 public class data19

02 {

03 public static void main(String[]args)

04 {

05 int a=16;

06 int c=-16;

07 int b=2;

08 int d=2;

09 System.out.println("a的移位结果:"+(a>>b));

10 System.out.println("c的移位结果:"+(c>>d));

11 }

12 }


【代码说明】a的值是16,转换成二进制是00010000,让它右移两位成00000100即4。c的值是-16,转换成二进制是11101111,让它右移一位是11111011即-4。

【运行效果】


a的移位结果:4

c的移位结果:-4