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问题:怎么就出现负数了呢?
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问题:怎么就出现负数了呢?
byte sum=0x00
这跟int没关系了啊,byte型的最高位为1不行吗?
那16进制的转换成byte型的不就会有这种情况吗?
很迷惑
而byte是 -128-127
非重叠部分会发生转换
但还是迷惑:字节不就是byte表示的么?
那如果我想表示0xaa怎么办?
我一直以为它就是16进制了,到今天才发现会报错。
看来理解有了很大的偏差!
我怎么都没法自圆其说