Java 3*012=30,而不是36。为什么呢?

Java 3*012=30,而不是36。为什么呢?,java,operators,Java,Operators,我很困惑这是为什么,我似乎找不到答案。这是作业中的内容: x=1, y=2, z=3; z=(int)(x/y*3.0+z*012); System.out.printf("%d %d %d", x, y, z); 答案是: 1 2 30; << from eclipse 1230 012是十进制值为10的八进制数而不是十进制数 z=(int)(x/y*3.0+z*012); 等于- z=(int)(1/2*3.0+3*10); 供参考 以0开头的数字是八进制数。 以

我很困惑这是为什么,我似乎找不到答案。这是作业中的内容:

x=1, y=2, z=3;

z=(int)(x/y*3.0+z*012);

System.out.printf("%d %d %d", x, y, z);
答案是:

1 2 30; << from eclipse

1230 
012
是十进制值为10的八进制数而不是十进制数

z=(int)(x/y*3.0+z*012);
等于-

z=(int)(1/2*3.0+3*10);
  • 供参考
以0开头的数字是八进制数。
以0x开头的数字是十六进制数。

数字以0b开头,或者OB是二进制数。(自Java版本7-)

012
是八进制数而不是十进制数,十进制值为10

z=(int)(x/y*3.0+z*012);
等于-

z=(int)(1/2*3.0+3*10);
  • 供参考
以0开头的数字是八进制数。
以0x开头的数字是十六进制数。

Numeric以0b开头,OB是二进制数。(由于Java edition 7-

在Java和其他几种语言中,以
0
开头的整数文本被解释为八进制(
base 8
)数量。这里的
012
是一个八进制数,其十进制值为f
10

所以你的乘法会是这样的

z = (int) (1/2 * 3.0 + 3 * 10);

八进制数字由ASCII数字0后跟一个或多个数字组成 在ASCII数字0到7之间穿插下划线,并且可以 表示正整数、零整数或负整数


在Java和其他几种语言中,以
0
开头的整数文本被解释为八进制(
base8
)数量。这里的
012
是一个八进制数,其十进制值为f
10

所以你的乘法会是这样的

z = (int) (1/2 * 3.0 + 3 * 10);

八进制数字由ASCII数字0后跟一个或多个数字组成 在ASCII数字0到7之间穿插下划线,并且可以 表示正整数、零整数或负整数


012
是一个八进制,因为它以
0
开头:

012 = (0 * 8^2) + (1 * 8^1) + (2) = 10
因此:

012 * 3 = 10 * 3 = 30
注意事项:

  • 记住,八进制是以8为基数的数字(十进制是以10为基数),所以它不能有大于或等于8的数字
  • 类似地,十六进制数字以
    0x
    开头,例如:
    0x12=1*16+2=18

  • 012
    是一个八进制,因为它以
    0
    开头:

    012 = (0 * 8^2) + (1 * 8^1) + (2) = 10
    
    因此:

    012 * 3 = 10 * 3 = 30
    
    注意事项:

    • 记住,八进制是以8为基数的数字(十进制是以10为基数),所以它不能有大于或等于8的数字
    • 类似地,十六进制数字以
      0x
      开头,例如:
      0x12=1*16+2=18
    请参见:

    八进制数字由一个ASCII数字0后跟一个或多个 ASCII数字0到7的中间有下划线,可以 表示正整数、零整数或负整数

    所以

    012=0*82+1*81+2*80=10

    在Java 7中,您可以使用它来中断值。

    请参阅:

    八进制数字由一个ASCII数字0后跟一个或多个 ASCII数字0到7的中间有下划线,可以 表示正整数、零整数或负整数

    所以

    012=0*82+1*81+2*80=10


    在Java 7中,您可以使用它来中断值。

    感谢您的快速响应。为什么我的教授没有指出这一点对我来说很奇怪……除非这是重点:)谢谢你的快速回复。为什么我的教授没有指出这一点对我来说很奇怪……除非这是重点:)你能加上括号吗?这会解释得更好吗