java如何处理八进制和十进制数

时间:2018-05-12 06:52:34

标签: java

我无法理解java如何存储指定为八进制和十六进制值的值。我需要解释以下代码片段的输出。

public class Test {
    public static void main ( String args[] )
    {

        int a = 10 , b = 017 , c = 0X3A ; 
        System.out.println( a + " " + b + " " + c) ; 
    } 
}

此代码生成的输出

10 15 58

对输出的详细解释会有很大的帮助。谢谢提前

1 个答案:

答案 0 :(得分:1)

基本上,如果指定的整数值以0开头,则认为它是八进制值,如果指定的整数值以0x开头,则将其视为十六进制值。十进制系统用于编程,因为它易于理解。在java中,
'println'在使用适当的'toString'方法转换值后输出单个值。默认情况下,toString()不会显式传递任何基数值,并将值作为十进制类型的基数处理。

Refer source

至于您的代码段,下图将显示您如何获得所获得的结果。

  1. a = 10 是十进制值。因此它是这样打印的。
  2. b = 017 是八进制值,因为它以'0'开头。在打印结果之前进行小数到十进制转换。

    转换:

    (8 ^ 0)* 7 +(8 ^ 1)* 1 = 7 + 8 = 15

  3. c = 0X3A 是一个十六进制值,因为它以'0X'开头。发生十六进制到十进制转换。

    <强>转换:

    (16 ^ 0)* A +(16 ^ 1)* 3 = 10 + 48 = 58 [因为十六进制中的[A-F]表示值[10-15]

  4. 因此我们 a = 10 b = 15且c = 58

    注意: 如果您需要打印hexa或octal值,可以更改格式说明符。

    **System.out.printf("%o %x",b,c);**
    

    输出:3a 17