public static void main(String[]args){
int big = 2147483647;
for(int i=1; i<=6; i++){
int bigger = big * i;
System.out.println(i + " * big = " + bigger);
}}不是已经都溢出了吗,那奇数和偶数怎么是这样的怎么这个结果很奇怪哦1 * big = 2147483647
2 * big = -2
3 * big = 2147483645
4 * big = -4
5 * big = 2147483643
6 * big = -6
int big = 2147483647;
for(int i=1; i<=6; i++){
int bigger = big * i;
System.out.println(i + " * big = " + bigger);
}}不是已经都溢出了吗,那奇数和偶数怎么是这样的怎么这个结果很奇怪哦1 * big = 2147483647
2 * big = -2
3 * big = 2147483645
4 * big = -4
5 * big = 2147483643
6 * big = -6
2147483647=0x7FFFFFFF 二进制为0111 1111 1111 1111 1111 1111 1111 1111
没溢出
2147483647*2=0xFFFFFFFE=-2
...
2147483647*2=0xFFFFFFFE 二进制为 1111 1111 1111 1111 1111 1111 1111 1110因为是 signed 求反加一后就是 2
高位为1 前加负号即 -2 若超过16bit的高位截断