int a = 2147483647;
int b = 2147483647;
int c = a * b;
long d = a * b;
double e = a * b;
System.out.println(c); //1
System.out.println(d); //1
System.out.println(e); //1.0
整数 2147483647 的二进制表示如下:
01111111 11111111 11111111 11111111
将其与自身相乘得到数字 4611686014132420609,其二进制为:
00111111 11111111 11111111 11111111 00000000 00000000 00000000 00000001
对于只有 32 位的int来说,这太大了,因此,结果只是截断所有不能容纳 32 位的位,只留下以下结果:
00000000 00000000 00000000 00000001
这个值 为1。