public class Sumjisuan {
 private static int temp=0xff;
 private static byte sum=0x00;
    public  Sumjisuan(){
super();
    
    }
    public static byte[] Sumjisuan(int idVal,int data){
     byte[] sendBytes=new byte[4];
sendBytes[0]=(byte)(0xAA&temp);
  System.out.println("1="+sendBytes[0]);
sendBytes[1]=(byte)(idVal&temp);
System.out.println("2="+sendBytes[1]);
sendBytes[2]=(byte) (data&temp);
System.out.println("3="+sendBytes[2]);
sendBytes[3]=(byte)((sendBytes[0]+sendBytes[1]+sendBytes[2])&temp);
sum=sendBytes[3];
return sendBytes;
    }
    
   public static void main(String args[]){
   new Sumjisuan();
   Sumjisuan(0x01,0x23);
   System.out.println("sum="+sum);
   }
}
运行结果:
1=-86
2=1
3=35
sum=-50问题:怎么就出现负数了呢?

解决方案 »

  1.   

    那楼上你给解释下啊
    byte sum=0x00
    这跟int没关系了啊,byte型的最高位为1不行吗?
    那16进制的转换成byte型的不就会有这种情况吗?
    很迷惑
      

  2.   

    两字节相与范围是 0-255 
    而byte是 -128-127
    非重叠部分会发生转换
      

  3.   

    谢谢两位!
    但还是迷惑:字节不就是byte表示的么?
    那如果我想表示0xaa怎么办?
    我一直以为它就是16进制了,到今天才发现会报错。
    看来理解有了很大的偏差!
    我怎么都没法自圆其说
      

  4.   

    0xaa 就是-86,这样可以实现,不知道是不是好方法。先把他强制转换int ,然后利用toHexString,转换成十六进制,再利用substring截取最后两个就是你要的0xaa.