问题具体如下:
byte bytes[];
int M,E;
……//向bytes[]中输入数据
M=bytes[i];
E=bytes[i]&255;
System.out.println("M="+M+"\n");
System.out.println("E="+E);
 
最后输出
M=-64
E=192
我搞不明白的是
-64怎么就变成192了?在二进制中 E=bytes[i]&255 具体是怎么进行的附加:这是《java2 从入门到精通》P612页的例子

解决方案 »

  1.   

    byte M=-64-64 的原码  11000000
          反码  10111111
          补码  11000000&256得到int值  11000000,也就是192
      

  2.   

    看看core java 或Think in java楼上说了不少,补充一下,在java中,设计int和比int位数来的小的类型,如byte,chart等,都是先把小类型扩展成int再来运算,故
    byte M=-64-64 的原码  11000000
          反码  10111111
          补码  11000000M的整型值在扩展时最左边一位是符号位1,扩展后就是11111111 11000000
    而M&255,这里255是整型的哦,其值是00000000 11111111,与操作的结果是00000000 11000000
      

  3.   

    十分感谢一楼的解答,但真正解决我疑惑的是二楼的同学,这里给二楼同学以热烈的掌声 pa!pa!pa!