两个byte型相加,得到的结果是int型的,首先byte是8位,int是32位,在进行计算的时候,byte最终被拉伸为32位的int压入栈中,但是是被虚拟机带着符号扩展出来的。比如将1用byte表示为0000 0001,压入栈中,java虚拟机会自动添加24位,即 0000 0000 .... 0001 。java虚拟机中的操作数可以是byte,但是不管是运算还是类型转换,最终结果都是int。
/**
* 将int转化成byte[]
*
* @param res 要转化的整数
* @return 对应的byte[]
*/
public static byte[] int2byte(int res) {
byte[] targets = new byte[4];
targets[0] = (byte) (res & 0xff);// 最低位
targets[1] = (byte) ((res >> 8) & 0xff);// 次低位
targets[2] = (byte) ((res >> 16) & 0xff);// 次高位
targets[3] = (byte) (res >>> 24);// 最高位,无符号右移。
return targets;
}
/**
* 将byte[]转化成int
* @param res 要转化的byte[]
* @return 对应的整数
*/
public static int byte2int(byte[] res) {
int targets = (res[0] & 0xff) | ((res[1] << 8) & 0xff00) | ((res[2] << 24) >>> 8) | (res[3] << 24);
return targets;
}