我正在尝试将4294967295分配给很长时间。那是(2 ^ 32-1) java(netbeans)给出以下错误消息 "整数过大"
实际上我试图找出一个int可以处理的最大数字(手动手动完成) 并发现它是2147483647(当然显然它是2 ^ 31-1)
但令人惊讶的是,我发现即使是长型也无法处理比这更大的数字。 int和long之间没有任何区别吗?java doc说long是64位
我错过了什么吗?
答案 0 :(得分:11)
问题是您使用4294967295作为int
字面值 - 但它不是有效的int
值。您希望它是long
字面值,因此您需要在其上添加L
后缀。这很好:
long x = 4294967295L;
如果整数文字后缀为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