在使用java编写虚拟机类型的程序时,经常会使用无符号数来作为地址或者操作数。java原生语言中并不支持无符号数,因此需要我们将有符号数转为无符号数。
核心思想使用位数更长的数字覆盖之前的无符号位,如果我们使用short计算,那么我们就要转换到int类型去计算,int的无符号类型就需要使用long以此类推。
但考虑到计算速度,int之下的类型都建议放到int类型去计算。使用&计算符号,将有符号的参数提升到无符号参数。
public static byte uByteAdd(byte a, byte b) {
int a1 = a & 0xff;
int b1 = b & 0xff;
return (byte) (a1 + b1);
}
上面的方法便模拟了无符号数相加的情况,同样也模拟了溢出。
在编写8bit计算时十分有用。
获得结果可以使用&0xff,来获取无符号数的真实值。
对于short而言使用&0xffff,来获取无符号数的真实值。