(1) 比如int x = 4331;
x = x/1000;
然后输出x,不报错,但是结果是4,是不是这就叫损失了精度?但为什么不报错?
对:损失了精度,因为int类型本省就是裁剪掉浮点类型的值,你可以尝试一下 int i = (int)4.331;
(2)然后用short又尝试了下
short x = 4331;
x = x/1000;
然后输出x,报错,int 转short损失精度;
为什么会是int转short损失精度?是因为1000默认为int?
报错是因为自动类型转换,X/1000的结果是4是个int类型的,不能直接赋值给int
(3)再尝试
short x = 4331,y = 1000;
x = x/y;
然后输出,报错,int转short损失精度;
这个int怎么来的?x y都定义为short了何来int?
还是上面的结果,它会自动转换成int,你要赋值,可以使用显示转换,即(short)
(4)加法也是
int x = 2000000000,y = 2000001111;
x = x + y;
输出x,不报错,但是结果是负数;
都已经超过int取值范围了,而且结果都错了,为什么还不报错?
超过int取值范围不会出错,建议你可以看看int类型定义时的内存结构是怎样的
(5)short加法
short x = 31111,y = 30000;
x = x+y;
输出,报错,int转short损失精度;
为什么int超了,结果错了都不报错?short就报错?求大神指点,小白真的不明白。
这道题和所有的一样,short类型只要有操作,会自动转换成int类型,其次,int超范围了,不代表会出错,只会变成负数,你可以看看内存存储结构
|