This question already has answers here:
why is not (123 == 0123) in java?
                                
                                    (3个答案)
                                
                        
                                5年前关闭。
            
                    
我很困惑为什么会这样,而我似乎找不到答案。这是来自作业:

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/

10-10 17:16