byte number=-23;
        number &=0xF0;
        number >>=4;
        System.out.println("number1:"+number);
        number=-23;
        number = (byte)((number & 0xF0) >> 4);
        System.out.println("number2:"+number);输出:number1:-2
     number2:14

解决方案 »

  1.   

    你第一个做法,相当于强转两次 byte;而第二个做法只强转一次。你试试看把第二个做法的:
      number = (byte) ((number & 0xF0) >> 4);
    换成:
      number = (byte) ((byte) (number & 0xF0) >> 4);就是你原来的结果了吧?
    说白了就是int型和byte型 符号位(最高位)问题。
      

  2.   

    谢谢。请问能讲一下&= 》= 》的含义与用法以及一般的使用地方吗?小白谢谢了。 
      

  3.   

    其实就是 自X 运算符。比如:
     += 自增运算 
     &= 自与运算(& 是位运算中的 与)
     >>= 自优异运算 (>> 是位运算中的 右移)
    规律也是一样的:
      number &= 0xF0;
    相当于:
      number = (byte) (number & (等式右侧));