您的位置:首页 > 编程语言 > Java开发

java语言基础(10)——类型强制转换时的数据溢出计算

2017-02-28 22:11 621 查看
class ForceConvert
{
public static void main(String[] args){
//byte a = 130;
byte a = (byte) 130;
System.out.println(a); // -126
}
}

如上所示例,我们直接定义 byte a = 130; 编译会报错,可能损失精度,因为byte 的范围是-128 ~ 127,而130超出byte范围。报错就不难理解了。而当我们用强制转换时 byte a = (byte) 130; 此时虽然可以编译通过,但此时a是多少呢。

分析:

整数默认是int类型,那么130 应该是占四个字节,表示为 

130 原码 反码 补码 00000000 00000000 00000000 10000010

强制转换为byte会截取数据 ,剩下最后一个字节  10000010,而此数据还是补码表示,我们把它转换为原码。

补码
10000010  减一求得反码

反码 10000001  取反求得原码

原码 11111110  转换为十进制 -126
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐