java int和byte转换

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; 
}

你可能感兴趣的:(java int和byte转换)