java - 3*012 = 30 而不是 36。这是为什么?

标签 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

我是如何到达这里的:

(1/2) = 0 * 3.0 = 0 + (z*012)= 30。我想说 36,但根据 IDE,我猜它是 30。

最佳答案

012 是八进制数,不是十进制数,十进制数是 10。

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

等于-

z=(int)(1/2*3.0+3*10);
  • 供引用

0开头的数字为八进制数。
以0x开头的数字为十六进制数。
数字以 0b 开头或 OB 为二进制数。(自 Java 版本 7 - Binary Literals )

关于java - 3*012 = 30 而不是 36。这是为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21719946/

相关文章:

c++ - 可能会使花括号过载吗?

c# - 更高效的循环?

Java - 有类似二进制流的东西吗?

java - 从 Java 服务器接收字符串到客户端

java - 如何使用新的 Bouncy CaSTLe 库从 PKCS10CertificationRequest 获取公钥?

java - 应用发布错误,即使在删除 CALL_LOG 和 SMS 权限之后

java - Hamcrest 匹配器比较两个数组

Python:为什么右移>>向下舍入,应该在哪里使用?

java - 新上传的文件和 Tomcat?

c# - 在 Where Linq 语句中使用具有泛型类型的 == 运算符