java无法处理32位数

时间:2014-10-15 07:16:24

标签: java types int long-integer

我正在尝试将4294967295分配给很长时间。那是(2 ^ 32-1) java(netbeans)给出以下错误消息 "整数过大"

实际上我试图找出一个int可以处理的最大数字(手动手动完成) 并发现它是2147483647(当然显然它是2 ^ 31-1)

但令人惊讶的是,我发现即使是长型也无法处理比这更大的数字。 int和long之间没有任何区别吗?java doc说long是64位

我错过了什么吗?

3 个答案:

答案 0 :(得分:11)

问题是您使用4294967295作为int字面值 - 但它不是有效的int值。您希望它是long字面值,因此您需要在其上添加L后缀。这很好:

long x = 4294967295L;

来自JLS section 3.10.1

  

如果整数文字后缀为ASCII字母L或l(ell),则其长度为long;否则它的类型为int(§4.2.1)。

答案 1 :(得分:3)

使用较低的l向编译器显示它是一个长值。

long l = 4294967295l ;

答案 2 :(得分:0)

来自The Java™ Tutorials - Primitive Data Types

  

int :默认情况下,int数据类型是32位带符号的二进制补码整数,其最小值为-2 31 ,最大值为2 31 -1。在Java SE 8及更高版本中,可以使用int数据类型来表示无符号的32位整数,其最小值为0,最大值为2 32 -1 < / strong>即可。使用Integer类将int数据类型用作无符号整数。有关更多信息,请参阅数字类一节。已经将诸如compareUnsigned,divideUnsigned等静态方法添加到Integer类中,以支持无符号整数的算术运算。

所以2 32 -1 = 4294967295