java无法处理32位数字

java无法处理32位数字,java,types,int,long-integer,Java,Types,Int,Long Integer,我正在尝试将4294967295分配给长。即(2^32-1) java(netbeans)给出以下错误消息 “整数太大” 事实上,我试图找出一个int可以处理的最大数字(手动完成) 并发现它是2147483647(当然很明显是2^31-1) 但令人惊讶的是,我发现即使是long类型也不能处理比这个大的数字。 int和long之间没有区别吗?java文档说long是64位的 我遗漏了什么吗?问题是您正在使用4294967295作为int文本-但它不是有效的int值。您希望它是一个longliter

我正在尝试将4294967295分配给长。即(2^32-1) java(netbeans)给出以下错误消息 “整数太大”

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

但令人惊讶的是,我发现即使是long类型也不能处理比这个大的数字。 int和long之间没有区别吗?java文档说long是64位的


我遗漏了什么吗?

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

long x = 4294967295L;
发件人:

如果整型文字以ASCII字母L或L(ell)作为后缀,则其类型为long;否则为int型(§4.2.1)


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

long l = 4294967295l ;
发件人:

int:默认情况下,int数据类型是一个32位有符号二补整数,最小值为-231,最大值为231-1。在Java SE 8及更高版本中,可以使用int数据类型表示无符号32位整数,其最小值为0,最大值为232-1。使用Integer类将int数据类型用作无符号整数。有关更多信息,请参阅数字类一节。向Integer类添加了静态方法,如compareUnsigned、divideUnsigned等,以支持无符号整数的算术运算

所以232-1=4294967295