Java中整数溢出的问题:int i=1000000;i*i为何等于-727379968,Java是如何处理溢出的?
读Java语言说明书到34页的时候碰到了一个整数相乘溢出的问题,百思不得其解,诚请行家指点。
int i=1000000;i*i为何等于-727379968?
书中说乘法是安装32位精度计算的。-727379968是计算结果1000000000000的低32位的十进制表示,计算结果对int类型来说太大了。怕英文水平有限个人理解有误,将原文附在下面(The multiplication is performed in 32-bit precision, The value -727379968 is the decimal value of the low 32 bits of the mathematical result, 1000000000000, which is a value too large for type int.)
问题如下:
1、Java是如何处理整数相乘溢出的?
2、i*i的低32位是如何取值法?我后来用i*i>>32得到了-727379968。
3、对于溢出是否先类型提升运算后再考虑精度问题?