首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么JLS声明最大的整型文字是2147483648?

为什么JLS声明最大的整型文字是2147483648?
EN

Stack Overflow用户
提问于 2013-05-04 10:08:57
回答 3查看 233关注 0票数 4

JLS 3.10.1. Integer Literals http://docs.oracle.com/javase/specs/jls/se7/html/jls-3.html#jls-3.10.1状态

代码语言:javascript
复制
The largest decimal literal of type int is 2147483648.

同时这条线

代码语言:javascript
复制
int x = 2147483648;

生成编译错误

代码语言:javascript
复制
The literal 2147483648 of type int is out of range

是JLS错了吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-04 10:15:02

int类型的最大十进制数是2147483648 (231)。

代码语言:javascript
复制
All decimal literals from 0 to 2147483647 may appear anywhere an int literal may appear. 

如果int类型的十进制文字大于2147483648,或者如果十进制文字2147483648不是作为一元减号运算符(§15.15.4).的操作数出现,则会出现编译时错误

票数 3
EN

Stack Overflow用户

发布于 2013-05-04 10:18:45

这是一个措辞糟糕的IMHO。它试图在这个表达中告诉我们的是:

代码语言:javascript
复制
-2147483648

减号不是整数文字的一部分,相反,减号是一元减号运算符,2147483648int文字,整数文字2147483648只能出现在此精确表达式中。

票数 6
EN

Stack Overflow用户

发布于 2013-05-04 10:22:53

是JLS错了吗?

不,JLS是特定的-区分一个int变量和一个"int文字“,即int类型的十进制文字。

int变量的范围是-2,147,483,648..2,147,483,647 (即-(2^31)..2^31-1)

编译器将在Java代码中解析并在int上下文中使用的最大十进制数是2,147,483,648,但它只能用作一元'-‘运算符的操作数,也就是说,您只能以一种方式使用它-构造一个整数可以容纳的最负的十进制值:-22147483648

在您提到的JLS的section 3.10.1 Integer Literals部分中,它说:

类型的最大十进制数是2147483648 (2^31)。

is也在几行之后说:

如果int类型的十进制文字大于2147483648 (2^31),或者如果十进制文字2147483648不是作为一元减号运算符的操作数出现,则它是编译时错误。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16369889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档