【问题标题】:Why is 09 "too large" of an integer number? [duplicate]为什么 09 整数“太大”? [复制]
【发布时间】:2011-08-04 02:00:22
【问题描述】:

他们认为是:

可能重复:
Integer with leading zeroes

但是如果你查看Integer with leading zeroes,你会发现这个问题是在jdk7推出之前被问到的,因此它的研究力度较低。但是在 jdk7 中,整数有一些变化和添加。以下是涵盖 jdk7 的最新答案。

我有一个代码:

class Test{
    public static void main(String[] args){
        int x=09;
        System.out.println(x);
    }
}

编译时出现错误:整数太大:09

为什么会这样?

再次,如果我将代码更改为:

class Test{
    public static void main(String[] args){
        int x=012;
        System.out.println(x);
    }
}

现在输出是 10

为什么它给出的输出是 10 而不是 12?

【问题讨论】:

    标签: java


    【解决方案1】:

    以0 开头的数字被视为octal - 9 不是八进制数字(但(通常)0-7 是)。


    十六进制文字以0x 开头,例如0xA.


    在 Java 6 之前,没有用于二进制和 你将不得不使用类似的东西

    int a = Integer.parseInt("1011011", 2);
    

    第二个参数指定所需的基数。


    Java 7 现在有binary literals。

    在 Java SE 7 中,整数类型(byte、short、int 和 long)也可以使用二进制数系统来表示。要指定二进制文字,请将前缀 0b 或 0B 添加到数字中。

    【讨论】:

    • 但是二进制和十六进制数字呢?
    • 剩下的是二进制数。以0开头的数字是八进制,以0x开头的数字是十六进制,但是有没有任何符号可以表示二进制?
    • @Mohammed Faisal:Java7 现在也有二进制字面量:0b100100101stackoverflow.com/questions/4013441/…
    • @Mohammad:更新我的帖子 - Java 中没有二进制小数(至少在版本 6 之前)。
    【解决方案2】:

    以“0”开头的整数文字被视为八进制。允许的数字是 0 到 7。

    【讨论】:

      【解决方案3】:

      以数字 0 开头的整数是 八进制(以 8 为基数)数字。最大的八进制数是 7; 07 之后是 010(等于十进制 8!)

      012(八进制十二)是 010(八进制十,即十进制 8)加 2,或十进制 10。

      【讨论】:

        【解决方案4】:

        09 是八进制数字文字,但无效。

        十六进制数字以 0x 开头,如 0xFFFF。

        Java 中过去没有二进制字面量。 Java 7 支持它们,从 0b 开始,例如 0b00100001。

        【讨论】:

        • 谢谢!像 jdk6 这样的 java 以前的版本不支持二进制文字吗?
        • 不,他们没有。您可以对二进制文件执行类似 Integer.parseInt("1111111111", 2) 的操作;
        【解决方案5】:

        以 0 开头的数字是八进制数。 http://en.wikipedia.org/wiki/Octal

        【讨论】:

          猜你喜欢
          • 2012-11-16
          • 2011-10-17
          • 2014-12-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-17
          • 2017-07-23
          相关资源
          最近更新 更多