为什么$ 4945932 $的平方出现为负数?

时间:2012-07-03 12:28:58

标签: java sqr

我声明了一个整数int i = 4945932;它的正方形出现了一些负的随机数。这怎么可能?我究竟做错了什么?请帮助。谢谢。

4 个答案:

答案 0 :(得分:7)

Integer overflow. Java int不能大于2,147,483,647;如果你试图存储一个更大的数字,它就会溢出。

如果您改为使用long,则可以存储更大的值,包括您尝试存储的值。如果你需要更大的值,java.math.BigInteger可以存储任意精度的整数;唯一的限制是你电脑的记忆。

答案 1 :(得分:2)

因为int的限制而发生。 integer OverFlow.

int可以存储4个字节,有符号(两个补码)。 -2,147,483,648至2,147,483,647。

如果你写int i= square(4945932)它是24462243348624所以它将超过int的限制,所以它表现异常。

答案 2 :(得分:2)

您可以使用

long l = 4945932L;
System.out.println(l * l);
BigInteger bi = BigInteger.valueOf(4945932L);
System.out.println(bi.multiply(bi));

打印

24462243348624
24462243348624

答案 3 :(得分:1)

你超过了int的大小。如果要平方4945932,则需要更改为长。