2018-1-20:类型转换,运算的问题

高精度类型->低精度类型的强转可能丢失精度,因为它是把高精度的低位截取转换为低精度数值,由此也引出了一些问题,请看下面两个问题:

问题一:请解释下述代码的错误原因

代码一:可以得出预料结果:

运行结果:10

代码二:错误

运行结果:错误,可能丢失精度

错误原因:在代码二中b1与b2都是变量,无法进行类型边界数值得检测,所以无法确定是否在byte的取值范围内,故会报精度错误。

代码三:

 

运行结果:-2147483648

原因:默认int类型的整数相加还是int类型的整数,一旦超出边界就会截取低32位,所以二进制首位(最高位)变为1,即为负数

代码四:

运行结果:1234

原因:任何数据和字符串相加都是做连接操作。

代码五:

运行结果: 7 

原因:这个之所以能正确运行,是因为+=这类运算符底层自动进行了类型转换,即先将s+4的运算结果转化为short再赋值给s,等价于s = (short)(s + 4);

如果这么写:short s = 3; s = s + 4; 运行错误,因为s不确定,是变量。

posted @ 2018-01-20 12:44  田小树。  阅读(101)  评论(0编辑  收藏  举报