代码:
int a = 201;
byte b = (byte)a;
System.out.println(b);
System.out.println(b & 0xff);
输出:
-55
201
实际上就是加了个255,它可以还原出byte里的无符号数值。

解决方案 »

  1.   

    一个byte是八位,ff=255=11111111这个byte那一位是1就得那一位的值,与操作。00000001
    11111111
    ---------
    00000001
      

  2.   

    byte是一个有符号数可以表示-128~+127,但是作为一个无符号数使用的时候可以表示0~255,而我们通常都是将byte作为无符号数用所以要&oxff
    给分吧,一般人我不告诉他的
      

  3.   

    public class T{
            public static void main(String args[]){
                    int a = 201;
                    byte b = (byte)a;
                    int c = b&0xff;
                    System.out.printf("%x,%x,%x\n",a,b,c);
                    System.out.println(b);
                    System.out.println(c);        }}
    执行结果:
    c9,c9,c9
    -55
    201从第一行可见在进行&0xff后它们的数据并没有改变,都为16进制c9,由此可以得出&0xff后没有任何底层的变化,
    只是这个操作先将byte提升为了整数对待,最后在System.out.println(b&0xff)中是当整数来处理的,而在整数中0xc9并没有越界,也就是符号位为0,此时把它看作正数输出
      

  4.   

    比如说 255 11111111 int 型。
    在java中int是占4位.是这样吗 00000000 00000000 00000000 11111111
    把它转化为byte是型的时候。是取多少位。我还是有点不明白?
    请继续解释?
      

  5.   

    java用的是大端字节序,像这个的话就取11111111