为什么 08 在 Java 中不是有效的整数文字?

发布于 2024-12-01 21:40:40 字数 66 浏览 1 评论 0原文

为什么 08 被认为是超出范围的 int,而 07 及以下则不是?

Why is 08 considered an out of range int but 07 and below are not?

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

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

发布评论

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

评论(6

那一片橙海, 2024-12-08 21:40:41

在 Java 和其他几种语言中,以 0 开头的整数文字被解释为八进制(以 8 为基数)数量。

对于单位数字(0809 除外,这是不允许的),结果是相同的,因此您可能没有注意到它们被解释为八进制。但是,如果您编写的数字具有超过一位有效数字,您可能会对结果感到困惑。

例如:

010 ==  8
024 == 20

由于八进制文字通常不是您想要的,因此您应该始终注意不要以 0 开始整数文字,除非您实际上尝试自己写入零。

In Java and several other languages, an integer literal beginning with 0 is interpreted as an octal (base 8) quantity.

For single-digit numbers (other than 08 and 09, which are not allowed), the result is the same, so you might not notice that they are being interpreted as octal. However, if you write numbers with more than one significant digit you might be confused by the result.

For example:

010 ==  8
024 == 20

Since octal literals are usually not what you want, you should always take care to never begin an integer literal with 0, unless of course you are actually trying to write zero by itself.

能否归途做我良人 2024-12-08 21:40:41

任何以 0 为前缀的数字都被视为八进制。八进制只能使用数字0-7,就像十进制可以使用0-9,二进制可以使用0-1一样。

// octal to decimal
01  // 1
02  // 2
07  // 7
010 // 8
020 // 16

// octal to binary (excluding most significant bit)
01  // 1 
02  // 10
07  // 111
010 // 1000 
020 // 10000

有 10 种人,懂三元的人,不懂三元的人,还有认为这是个愚蠢笑话的人。

Any number prefixed with a 0 is considered octal. Octal numbers can only use digits 0-7, just like decimal can use 0-9, and binary can use 0-1.

// octal to decimal
01  // 1
02  // 2
07  // 7
010 // 8
020 // 16

// octal to binary (excluding most significant bit)
01  // 1 
02  // 10
07  // 111
010 // 1000 
020 // 10000

There are 10 types of people, those who understand ternary, those who don't, and those who think this is a stupid joke.

你怎么这么可爱啊 2024-12-08 21:40:41

来自 Java 规范

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

From the Java specification:

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.

九八野马 2024-12-08 21:40:41

前导零表示该值是八进制的。 8 不是八进制数字,二进制数不超过 2 个,十六进制数 G 有效。

Leading zero means the value is in octal. 8 is not an octal digit, no more than 2 is valid in binary or G is valid in hexadecimal.

就像说晚安 2024-12-08 21:40:41

Java中,如果您定义一个以“0”开头的int,则表示您正在定义八进制中的数字。

int a = 08 给出超出范围的错误,因为八进制中没有任何数字“8”。 八进制仅提供 0-7 数字。

如果您定义a = 07,那么它不会给出超出范围的错误,因为数字“0”和“7”在八进制的范围内。

In Java, if you are defining an int with a leading '0' denotes that you are defining a number in Octal.

int a = 08 is giving out of range error because there is no any number '8' in Octal. Octal provides 0-7 numbers only.

If you define a = 07 then it's not giving out of range error because the numbers '0' and '7' are within the Octal's range.

天邊彩虹 2024-12-08 21:40:41

在大多数编程语言中,例如 Java 和 C/C++,带有前导零的数字被解释为 八进制数。我们知道八进制数只能表示 07 数字。因此,像 0503054 这样的数字是有效的,但像 0780348 这样的数字是有效的。 code>、0908 往往无效。

In most of programming language like Java and C/C++, the number with leading zero are interpreted as octal number. As we know octal numbers are only represented within 0 to 7 digits only. Hence numbers like 05,03,054 are valid but the numbers like 078,0348,09,08 are tends to invalid.

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