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; 
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容