java中的无符号右移>>>

java中的byte类型在运算过程中都会被转换为int类型进行运算,这样在对负的byte类型进行无符号右移的时候会出现和有符号右移同样的结果。

example:11110000>>>4  我们期待变为 00001111 ,但结果变为11111111。

原因:11110000先被转换为整型11111111111111111111111111110000,然后无符号右移4位变为00001111111111111111111111111111,

         截取后8位11111111赋值给原值,出现以上结果。

技巧:我们可以把要参与运算的byte和0xff按位与(保持低8为不变,高位全部赋0),然后再参与无符号移位。

例子:

public class Test{
public static void main(String[] args){
  byte b=(byte)0xf1;
  byte c=(byte)(b>>4);//有符号右移
  byte d=(byte)(b>>>4);//无符号右移(即高位自动填充0)
  byte e=(byte)((b&0xff)>>4);
  System.out.println(b+" "+c+" "+d+" "+e);
  }
}

 

posted on 2012-10-10 11:04  waxili  阅读(1515)  评论(0编辑  收藏  举报

导航