如果我给出的值大于int range,则我将整数存储在long变量中,这就是说“ int类型的字面量大于range”。
整数的范围是2147483648至2147483647
所以当我存储
long l=2147483647;
然后运行正常
但是当我存储
long l=2147483648;
然后给出编译时间错误,因为“ int类型的字面量大于范围”
所以我想知道如果我要存储long l=2147483647;
即int range的值在long变量中,然后它使用32位还是64位存储它。
如果它使用64位,那么为什么给long l=2147483648;
提供错误
答案 0 :(得分:1)
您似乎认为,当long
存储一个在int
范围内的值时,它将使用32位存储它。这不是真的。
Java语言规范第4.2节原始类型和值
整数类型为
byte
,short
,int
和long
,其值分别为8位,16位,32位和 64位带符号的二进制补码整数。
您收到编译器错误,因为在该上下文中不能使用整数文字2147483648
。该错误与long
的大小无关。
第3.10节
从0到2147483647的所有十进制文字都可能出现在int的任何位置 文字可能会出现。十进制文字2147483648可能仅显示为 一元减运算符
-
(第15.15.4节)的操作数。如果出现十进制文字2147483648,则是编译时错误 除作为一元减运算符的操作数以外的任何地方;或者如果 int类型的十进制文字大于2147483648