以 0 开头的 int 行为很奇怪

发布于 2024-12-02 11:55:01 字数 333 浏览 0 评论 0原文

可能的重复:
带前导零的整数

有人可以告诉我这里发生了什么吗?当我用前导零初始化 int 时,程序不会忽略零,而是执行一些我不知道的其他操作。

int num = 0200;

System.out.println(num); // 128

System.out.println(033); // 27

Possible Duplicate:
Integer with leading zeroes

Can someone please tell me what is going on here? When I initialize an int with leading zeroes the program does not ignore the zeroes and instead does some other operation I am unaware of.

int num = 0200;

System.out.println(num); // 128

System.out.println(033); // 27

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

云巢 2024-12-09 11:55:01

当然 - 根据 Java 语言规范,它会将其视为八进制文字,第 3.10.1 节

八进制数字由 ASCII 数字 0 后跟一个或多个 ASCII 数字 0 到 7 组成,可以表示正整数、零或负整数。

八进制数字:
        0 八进制数字

八进制数字:
        八进制数字
        八进制数字 八进制数字

八进制数字:其中之一
        0 1 2 3 4 5 6 7

请注意,八进制数字始终由两个或多个数字组成; 0 始终被认为是十进制数字 - 实际上这并不重要,因为数字 0、00 和 0x0 都表示完全相同的整数值。

Sure - it's treating it as an octal literal, as per the Java Language Specification, section 3.10.1:

An octal numeral consists of an ASCII digit 0 followed by one or more of the ASCII digits 0 through 7 and can represent a positive, zero, or negative integer.

OctalNumeral:
        0 OctalDigits

OctalDigits:
        OctalDigit
        OctalDigit OctalDigits

OctalDigit: one of
        0 1 2 3 4 5 6 7

Note that octal numerals always consist of two or more digits; 0 is always considered to be a decimal numeral-not that it matters much in practice, for the numerals 0, 00, and 0x0 all represent exactly the same integer value.

情话已封尘 2024-12-09 11:55:01

这是一个八进制(以 8 为基数)文字。

同样,0x27 是十六进制(以 16 为基数)文字,十进制值为 39。

That's an octal (base 8) literal.

Similarly, 0x27 is a hexadecimal (base 16) literal, with a decimal value of 39.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文