我无法理解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
对输出的详细解释会有很大的帮助。谢谢提前
答案 0 :(得分:1)
基本上,如果指定的整数值以0开头,则认为它是八进制值,如果指定的整数值以0x开头,则将其视为十六进制值。十进制系统用于编程,因为它易于理解。在java中,
'println'在使用适当的'toString'方法转换值后输出单个值。默认情况下,toString()不会显式传递任何基数值,并将值作为十进制类型的基数处理。
至于您的代码段,下图将显示您如何获得所获得的结果。
b = 017 是八进制值,因为它以'0'开头。在打印结果之前进行小数到十进制转换。
转换:
(8 ^ 0)* 7 +(8 ^ 1)* 1 = 7 + 8 = 15
c = 0X3A 是一个十六进制值,因为它以'0X'开头。发生十六进制到十进制转换。
<强>转换:强>
(16 ^ 0)* A +(16 ^ 1)* 3 = 10 + 48 = 58 [因为十六进制中的[A-F]表示值[10-15]
因此我们 a = 10 b = 15且c = 58
注意: 如果您需要打印hexa或octal值,可以更改格式说明符。
**System.out.printf("%o %x",b,c);**
输出:3a 17