美文网首页
java int和byte转换

java int和byte转换

作者: xiaodongod | 来源:发表于2019-06-19 13:38 被阅读0次

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转换

      本文链接:https://www.haomeiwen.com/subject/gqtszqtx.html