关于整数值前导零

时间:2015-07-11 12:28:50

标签: java

我有以下代码

int a = 01111;
System.out.println("output1 = " + a);
System.out.println("output2 = " + Integer.toOctalString(1111));

,输出

output1 = 585
output2 = 2127

我期待输出如下。

output1 = 2127
output2 = 2127

为什么在打印直接int值时会给585?我期待java自动将前导零转换为八进制值。

01111585之间的关系是什么?

3 个答案:

答案 0 :(得分:4)

前导0表示八进制数(基数为8)。

01111(八进制)是1 * 8 ^ 3 + 1 * 8 ^ 2 + 1 * 8 ^ 1 + 1 * 8 ^ 0 = 585(十进制)

Integer.toOctalString(1111)将十进制数1111转换为八进制字符串。 2127八进制(2 * 8 ^ 3 + 1 * 8 ^ 2 + 2 * 8 ^ 1 + 7 * 8 ^ 0)是1111十进制。

答案 1 :(得分:3)

System.out.println("output2 = " +Integer.toOctalString(1111));

将十进制字符串1111转换为八进制字符串:2127

八进制1111的十进制值是585 - 正如预期的那样,结果是预期的,你不会得到相同的值,因为这两个语句做了不同的事情。

正确的测试将是:

System.out.println("output2 = " +Integer.toOctalString(a));

正如预期的那样,1111

会给你

答案 2 :(得分:0)

如果数字文字以0开头,则表示八进制基数。类似地,0x表示十六进制基数,0b表示二进制数。

所以你的

int a=01111;

..实际上是

8^3 + 8^2 + 8^1 + 8^0 = 
512 + 64 + 8 + 1 = 585

Integer.toOctalString(1111))实际上是一个反向函数,即结果是八进制数为1111的八进制数,2127实际上是

2127(oct) = 2 × 8^3 + 1 × 8^2 + 2 × 8^1 + 7 × 8^0 = 1111(dec)