int转byte
在java中,宽类型(wider integer type)转窄类型(narrower type)会直接将高位的字节截断。因此,只要宽类型的数据可以被压缩成窄类型,值就不会变。比如 int的127转成byte后,值仍然是127。而当int的值超出了byte的范围(-128~127),则会发生溢出。比如int的128转成byte后的值不是最接近它的127,而是-128。
分析
当int转byte时,高位的数据全部被截断,128被截断后就是10000000,而byte类型是有符号的,因此,128转换后的结果肯定是个负数。熟悉二进制补码运算的都知道,负数求值为取反后加1,因此10000000的值为01111111(127) + 1 = 128,因此结果是-128。
当int的值超过256后,低位的值则都是0。此时转换成byte后的值则恒定为0。
最后列出一个可以帮我们计算转换值的简单算法:
int byteValue;
int temp = intValue % 256;
if ( intValue < 0) {
byteValue = temp < -128 ? 256 + temp : temp;
} else {
byteValue = temp > 127 ? temp - 256 : temp;
}