移位运算符

>> 右移
<< 左移
>>> 右移包含负比特
移位运算符移动一个数字的比特去右边或左边,产生新的数值。移位运算符只用于整型数值(不包括浮点型)。为确定移位的结果,需要将数值转换为比特值。
整数型8,开始,我们必须将这数值用比特表示:
0000    0000    0000    0000    0000    0000    0000    1000
int是一个32位整型,所以所有32位必须表示出来。如果我们用一个比特移动到右边,用>>运算符,新的比特数:
0000    0000    0000    0000    0000    0000    0000    0100
这时候,用十进制表示就是4.用java代码表示为:
class BitShift {
   public static void main(String [] args) {
      int x = 8;
      System.out.println(”Before shift x equals ” + x);
      x = x >> 1;
      System.out.println(”After shift x equals ” + x);
   }
}
运行结果
c:\Java Projects\BitShift>java BitShift
Before shift x equals 8
After shift x equals 4

移位运算符能用于所有整型数值,不管它们的表示方式为(八进制,十进制,或者十六进制)。左移也是相同的方式,除非所有的比特位都移到了相反的方向。下面是十六进制的移位:
class BitShift {
   public static void main(String [] args) {
      int x = 0×80000000;
      System.out.println(“Before shift x equals “ + x);
      x = x << 1;
      System.out.println(“After shift x equals “ + x);
   }
}
为理解上面的例子,有必要将十六进制转换为比特值。幸运的是从十六进制转换为二进制很简单,每个十六进制数字用4比特位表示,如:
8    0    0    0    0    0    0    0
1000 0000 0000 0000 0000 0000 0000 0000

在上面的例子中,最左边的比特位代表符号(阳性或阴性),当最左边的是1代表是阴性,当是0时是阳性。运行程序如下结果:
c:\Java Projects\BitShift>java BitShift
Before shift x equals -2147483648
After shift x equals 0
可以发现,当向左移动一个比特时,全部都是0了。
当遇到一个阴性的比特我们向右移时,移向右侧但仍然保持阴性。如十六进制0×80000000
1000 0000 0000 0000 0000 0000 0000 0000
当我们使用右移符>>时
1100 0000 0000 0000 0000 0000 0000 0000
可以发现,比特向右移动了但是阴性比特仍然保留着。代码如下:
class BitShift {
   public static void main(String [] args) {
      int x = 0×80000000;
      System.out.println(”Before shift x equals ” + x);
      x = x >> 4;
      System.out.println(”After shift x equals ” + x);
   }
}
运行结果如下:
C:\Java Projects\BookTest>java BitShift
Before shift x equals -2147483648
After shift x equals -134217728
得到的数值用比特表示:
1111 1000 0000 0000 0000 0000 0000 0000
如果我们不想保留负号,我们可以用运算符>>>
class BitShift {
   public static void main(String [] args) {
      int x = 0×80000000;
      System.out.println(”Before shift x equals ” + x);
      x >>>= 4; //Assignment operator
      System.out.println(”After shift x equals ” + x);
   }
}
C:\Java Projects\BookTest>java BitShift
Before shift x equals -2147483648
After shift x equals 134217728
这时候,新的数值是正数因为不在保留阴性比特了。结果用二进制表示为:
0000 1000 0000 0000 0000 0000 0000 0000
下面的例子中,得到的结果是-1
1111 1111 1111 1111 1111 1111 1111 1111

转载注明出处:绿程网

绿程网坚持自由、开放、共享的原则

围绕web开发生物分析提供免费在线编程教程生物教程等资源。